[英]Bitwise and (&) operator
我读到做一个& 0x7fffffff
只掩盖符号位并且不会篡改其他位。
int a = Integer.MIN_VALUE;
System.out.println(a & 0x7fffffff);
但是,这段代码输出
0
代替
2147483648
这是为什么?
Java中的负数存储为二进制补码。 因此,最小值具有符号位设置而所有其他值未设置。 所以你要做的是:
10000000000000000000000000000000
& 01111111111111111111111111111111
清除符号位后,您将得到零。
00000000000000000000000000000000
删除最重要的位可确保获得非负值。 它不能确保结果是积极的。 (0也是非负数。)它也不能确保你得到负值的绝对值。 (你永远不会得到。)
实际上,它将导致任何负int
值的以下值: negative_value - Integer.MIN_VALUE
。
为什么它的行为如此,你必须检查两者的补充是如何工作的: https : //en.wikipedia.org/wiki/Two's_complement
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.