gpt4 book ai didi

需要对按位非 (~) 运算符进行说明

转载 作者:太空狗 更新时间:2023-10-29 15:13:39 24 4
gpt4 key购买 nike

假设您有以下 C 代码。

 unsigned char a = 1;

printf("%d\n", ~a); // prints -2
printf("%d\n", a); // prints 1

我很惊讶地看到 -2 作为 ~1 转换的结果打印出来:

0000 0001 的相反数是 1111 1110。那不是 -2。

我在这里错过了什么?

最佳答案

它是二进制补码。

在二进制补码表示中,如果数字 x 的最高有效位为 1,则实际值为 −(~x + 1)。

例如,

0b11110000 = -(~0b1111 + 1) = -(15 + 1) = -16.

这是负数的自然表示,因为

0000001 =  1
0000000 = 0
1111111 = -1 (wrap around)
1111110 = -2
1111101 = -3 etc.

参见 http://en.wikipedia.org/wiki/Two%27s_complement了解详情。


顺便说一句,要打印无符号值,请使用 %hhu%hhx 格式。参见 http://www.ideone.com/YafE3 .

关于需要对按位非 (~) 运算符进行说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3695962/

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