~0做什么?

Aus*_*inT 4 c c++ bit bitwise-operators


〜0意味着它翻转000000000到1111111111?

printf("Check: %i", ~0);
Run Code Online (Sandbox Code Playgroud)

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

das*_*ght 17

〜0意味着它翻转000000000到1111111111?

是的,它确实.

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

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

  • 我习惯于有人打我的答案(在这里慢打字),但通常他们也不会抓住9个赞成票!给你的一顶帽子. (2认同)

Edw*_*uck 6

Does ~0 mean its flipping 000000000 to 1111111111?
Run Code Online (Sandbox Code Playgroud)

是的,这就是它的含义.

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

The printf results to -1, which is why I am confused.
Run Code Online (Sandbox Code Playgroud)

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

000000000000
Run Code Online (Sandbox Code Playgroud)

并从中减去一个需要借用需要借用的东西,依此类推,直到你"滚动"整个寄存器

111111111111
Run Code Online (Sandbox Code Playgroud)

从逻辑上讲,如果你将"1"添加到该数字,它将携带,携带,等等,直到它向相反的方向"滚动",000000000再次屈服.

Does -1 essentially mean the same thing as 11111111111111111 bits?
Run Code Online (Sandbox Code Playgroud)

是的,只要您使用2的补码有符号整数.

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

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

printf("Check: %x", ~0);
Run Code Online (Sandbox Code Playgroud)

这将打印输出

Check ffffffff
Run Code Online (Sandbox Code Playgroud)

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

11111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)