按位非运算符

2022-08-31 22:43:36

为什么按位运算打印 -1 ?在二进制中,不是0应该是1。为什么?(~0);


答案 1

你实际上已经很接近了。

在二进制中,不是 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


延伸阅读:


答案 2

你实际上说的是~0x00000000,这导致了0xFFFFFFFF。对于 java 中的 (signed) int,这意味着 -1。