为什么按位操作(~0);打印-1?在二进制中,不为0应该为1。为什么呢?
(~0);
你实际上很亲密。
在二进制中,不为0应该为1
是的,当我们谈论一点时,这是绝对正确的。
但是,int其值为0实际上是全零的32位!~将所有32个零转换为32个零。
int
~
System.out.println(Integer.toBinaryString(~0)); // prints "11111111111111111111111111111111"
这是的补码表示形式-1。
-1
类似地:
System.out.println(Integer.toBinaryString(~1)); // prints "11111111111111111111111111111110"
也就是说,对于32位无符号int二进制补码表示,~1 == -2。
~1 == -2
进一步阅读:
~x
(-x)-1