gpt4 book ai didi

c - 为什么它以十六进制表示法这样显示?

转载 作者:太空狗 更新时间:2023-10-29 15:17:34 25 4
gpt4 key购买 nike

我正在尝试对变量 ab 进行位运算。当我反转 a 时,其值为 0xAF,结果显示为 8 位数字。与其他显示为 2 位数字的不同。

我不知道为什么会这样,但猜想这与 %x 的显示方式和小端有关吗?

这是我的代码:

#include <stdio.h>
int main()
{
int a = 0xAF; // 10101111
int b = 0xB5; // 10110101

printf("%x \n", a & b); // a & b = 10100101
printf("%x \n", a | b); // a | b = 10111111
printf("%x \n", a ^ b); // a ^ b = 00011010
printf("%x \n", ~a); // ~a = 1....1 01010000
printf("%x \n", a << 2);// a << 2 = 1010111100
printf("%x \n", b >> 3); // b >> 3 = 00010110

return 0;
}

最佳答案

考虑到您的 int a 最有可能是 32 位大小,您的 a 实际上看起来像这样:

int a = 0xAF; // 0000 0000 0000 0000 0000 0000 1010 1111

所以如果你翻转上面的所有位,你有

1111 1111 1111 1111 1111 1111 0101 0000

或者,十六进制

0xFFFFFF50

这正是您得到的。其他仅显示 2 位数字,因为在打印十六进制时省略了尾随零,而您的其他位操作实际上不会更改任何前导零。

----为此归功于@chqrlie----如果你真的只想看到结果的 8 位,你可以这样做

printf("%hhx \n", ~a); // ~a = 1....1 01010000 --> Output : 50

将打印值限制为 unsigned char(8 位 [在现代操作系统上,不保证,但很可能适合您的目的])长度。

关于c - 为什么它以十六进制表示法这样显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35125945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com