按位非运算符

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

回答:

你实际上很亲密。

在二进制中,不为0应该为1

是的,当我们谈论一点时,这是绝对正确的。

但是,int其值为0实际上是全零的32位!~将所有32个零转换为32个零。

System.out.println(Integer.toBinaryString(~0));

// prints "11111111111111111111111111111111"

这是的补码表示形式-1

类似地:

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

// prints "11111111111111111111111111111110"

也就是说,对于32位无符号int二进制补码表示,~1 == -2


进一步阅读:

  • 补码

    • 这是Java(以及其他系统)用来表示带符号的数字位的系统

  • JLS 15.15.5按位补码运算符 ~

    • “请注意,在所有情况下,均~x等于(-x)-1

以上是 按位非运算符 的全部内容, 来源链接: utcz.com/qa/405609.html

回到顶部