What does ~0 do?

What does ~0 do?

本文关键字:do does What      更新时间:2023-10-16

~0是否意味着它的翻转000000000到1111111111?

printf("Check: %i", ~0);

printf结果为-1,这就是我感到困惑的原因。
-1本质上与11111111111111111位的含义相同吗?

~0是否意味着它的翻转000000000到1111111111?

是的,确实如此。

-1本质上与11111111111111111位的含义相同吗?

在2s补码表示中,确实如此。

Does ~0 mean its flipping 000000000 to 1111111111?

是的,这就是它的意思。

printf("Check: %i", ~0);
The printf results to -1, which is why I am confused.

这是因为2的补码算法,我们通常接受零作为

000000000000

从中减去一需要一个需要借位的"借位",以此类推,直到你"滚动"整个寄存器

111111111111

从逻辑上讲,如果你把"1"加到这个数字上,它就会进位,进位,以此类推,直到它向相反的方向"滚动",再次产生000000000

Does -1 essentially mean the same thing as 11111111111111111 bits?

是的,只要你使用的是2的补码有符号整数。

----编辑,包括cincutar现已删除的帖子的详细信息(我希望他没有删除它)---

要查看格式化为(无符号)十六进制数的相同内存,请使用命令

printf("Check: %x", ~0);

它将打印输出

Check ffffffff

这是(对于那些读不好十六进制的人)

11111111111111111111111111111111

这是由于数学运算"二的补码"。在youtube上可以找到一个很好的二补码视频教程。这是其中一个:)

youtube链接

~0 == 0xFFFFFFFF

其中0xFFFFFFFF=32乘以1,这是2的顺应性表示中的-1

由于~是逐位运算,并且在每一位中将0变为1:

~0b1010 == 0b0101