按位非运算符
2022-08-31 22:43:36
为什么按位运算打印 -1 ?在二进制中,不是0应该是1。为什么?(~0);
为什么按位运算打印 -1 ?在二进制中,不是0应该是1。为什么?(~0);
你实际上已经很接近了。
在二进制中,不是 0 应该是 1
是的,当我们谈论一个位时,这是绝对正确的。
但是,值为 0 的 a 实际上是所有零的 32 位! 将所有 32 个零反转为 32 个 1。int
~
System.out.println(Integer.toBinaryString(~0));
// prints "11111111111111111111111111111111"
这是两者的补码表示。-1
同样地:
System.out.println(Integer.toBinaryString(~1));
// prints "11111111111111111111111111111110"
也就是说,对于二进制补码表示中的 32 位无符号,.int
~1 == -2
延伸阅读:
~
~x
(-x)-1
"你实际上说的是~0x00000000,这导致了0xFFFFFFFF。对于 java 中的 (signed) int,这意味着 -1。