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它应该是两个人的补码。查看链接到的答案。