Java 为什么~0返回-1?

Java 为什么~0返回-1?,java,bit-manipulation,Java,Bit Manipulation,这是我尝试过的代码: int num = ~0; System.out.print(num); 输出:-1 据我所知,~反转位。因此,0000 0000将变成1111111。这是怎么回事?我意识到这是一个非常基本的问题,涉及到二的补码,但我无法理解它。因为-1表示为所有的一 System.out.println(Integer.toBinaryString(-1)); 输出为 11111111111111111111111111111111 因为-1表示为所有 System.out.pri

这是我尝试过的代码:

int num = ~0;
System.out.print(num);
输出:
-1


据我所知,
~
反转位。因此,
0000 0000
将变成
1111111
。这是怎么回事?我意识到这是一个非常基本的问题,涉及到二的补码,但我无法理解它。

因为
-1
表示为所有的一

System.out.println(Integer.toBinaryString(-1));
输出为

11111111111111111111111111111111

因为
-1
表示为所有

System.out.println(Integer.toBinaryString(-1));
输出为

11111111111111111111111111111111

1111111实际上是-1,1111110是-2。这就是生活,不知道该怎么说,1111111实际上是-1,1111110是-2。这就是生活,不知道该怎么说

数字是以32位格式表示的

了解为什么它显示为全部1,然后转换为-1

原因:
要了解更多信息,请阅读此线程:

数字以32位格式表示

了解为什么它显示为全部1,然后转换为-1

原因:
要了解更多信息,请阅读以下帖子:

最重要的位值
-2^31
,而不是
2^31
。剩下的只是算术。这个问题真的是“~运算符做什么”还是“为什么-1表示为所有1位”?你似乎很清楚,~将每一位都颠倒过来。这完全独立于任何涉及二的补码的事情。事实上,所有的1位代表整数-1是2的补码,但这不是你问题的主题所要问的。因为如果你把1加进去,它会一直进行下去,得到0。所以
num+1=0
num
最好是-1。最高有效位的值是
-2^31
,而不是
2^31
。剩下的只是算术。这个问题真的是“~运算符做什么”还是“为什么-1表示为所有1位”?你似乎很清楚,~将每一位都颠倒过来。这完全独立于任何涉及二的补码的事情。事实上,所有的1位代表整数-1是2的补码,但这不是你问题的主题所要问的。因为如果你把1加进去,它会一直进行下去,得到0。所以
num+1=0
num
最好是-1。我想你指的是2的补码运算。我还是很困惑。在一个人的补码运算中,
-1
应该是
1111111111111111 0
@GaneshKamath它应该是两个人的补码。看看你链接到的答案。我想你指的是二的补码运算。我还是很困惑。在一个人的补码运算中,
-1
应该是
1111111111111111 0
@GaneshKamath它应该是两个人的补码。查看链接到的答案。