为什么按位操作(~0);打印-1?在二进制中,0不应该是1。为什么?
发布于 2010-03-25 15:10:38
实际上你们已经很接近了。
以二进制表示的
应为1,而不是0
是的,当我们谈到一点的时候,这是绝对正确的。
然而,值为0的int实际上是32位全零!~将所有32个0反转为32个1。
System.out.println(Integer.toBinaryString(~0));
// prints "11111111111111111111111111111111"这是-1的两个补码表示。
类似地:
System.out.println(Integer.toBinaryString(~1));
// prints "11111111111111111111111111111110"也就是说,对于二进制补码表示~1 == -2中的32位无符号int。
进一步阅读:
~ ~x都等于(-x)-1"
发布于 2010-03-25 14:44:26
您实际说的是~0x00000000,结果是0xFFFFFFFF。对于java中的(带符号的) int,这意味着-1。
发布于 2010-03-25 14:44:36
~是一个按位运算符。
~0 = 1 which is -1 in 2's complement form http://en.wikipedia.org/wiki/Two's_complement
一些二进制补码形式的数字和它们的位不是~ (就在它们下面):
0 1 1 1= 127
1 0 0 0=−128
0 1 1 1 0= 126
1 0 0 0 1=−127
1 1 1=−1
0 0 0
1 1 1 0=−2
0 0 0 1=1 1 0 0 0 1=−127
0 1 1 1 0= 126 1 0 0 0=−128
0 1 1 1= 127
https://stackoverflow.com/questions/2513525
复制相似问题