按位非运算符
为什么按位操作(~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