~0做什么?

时间:2012-08-31 20:28:01

标签: c++ c bitwise-operators bit


〜0表示将其翻转到000000000到1111111111?

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

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

4 个答案:

答案 0 :(得分:17)

  

〜0表示将其翻转到000000000到1111111111?

是的,确实如此。

  

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

2s complement表示中,确实如此。

答案 1 :(得分:6)

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

答案 2 :(得分:3)

~0 == 0xFFFFFFFF

其中0xFFFFFFFF = 32次1,在2's compliement表示

中为-1

因为~是按位运算并且在每个位中变为0:

~0b1010 == 0b0101

答案 3 :(得分:3)

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

youtube link