~0做什么?


〜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现已删除的post的详细信息(我希望他不删除它)—

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

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

这将打印输出

 Check ffffffff 

这是(对于那些不能很好地读取hex的人)

 11111111111111111111111111111111 

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

youtube链接

~0 == 0xFFFFFFFF

其中0xFFFFFFFF = 32次1,在2的compliement表示中为-1

因为~是按位运算,并且每位变为0:

 ~0b1010 == 0b0101