一尘不染

按位非运算符

java

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


阅读 377

收藏
2020-12-03

共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


进一步阅读:

2020-12-03