为什么 ~0 return -1?

Why does ~0 return -1?

这是我试过的代码:

int num = ~0;
System.out.print(num);

输出:-1

据我了解,~ 反转位。因此,0000 0000 将变为 1111 1111。这-1怎么样?我意识到这是一个非常基本的问题,涉及补码,但我无法弄清楚。

因为-1表示全1

System.out.println(Integer.toBinaryString(-1));

输出是

11111111111111111111111111111111

1111 1111 实际上是-1,1111 1110 实际上是-2。生活就是这样,不知道怎么说

数字以 32 位格式表示。

理解为什么它显示为全 1 然后转换为 -1。

原因:

~0 = ~(00000000 00000000 00000000 00000000) = (11111111 11111111 11111111 11111111) = -1

要了解更多信息,请阅读此主题:How does the bitwise complement (~) operator work?