繁体   English   中英

按位和(&)运算符

[英]Bitwise and (&) operator

我读到做一个& 0x7fffffff只掩盖符号位并且不会篡改其他位。

int a = Integer.MIN_VALUE;
System.out.println(a & 0x7fffffff);

但是,这段代码输出

0

代替

2147483648

这是为什么?

Java中的负数存储为二进制补码。 因此,最小值具有符号位设置而所有其他值未设置。 所以你要做的是:

  10000000000000000000000000000000
& 01111111111111111111111111111111

清除符号位后,您将得到零。

  00000000000000000000000000000000

资料来源: https//en.wikipedia.org/wiki/Two%27s_complement

删除最重要的位可确保获得非负值。 它不能确保结果是积极的。 (0也是非负数。)它也不能确保你得到负值的绝对值。 (你永远不会得到。)

实际上,它将导致任何负int值的以下值: negative_value - Integer.MIN_VALUE

为什么它的行为如此,你必须检查两者的补充是如何工作的: https//en.wikipedia.org/wiki/Two's_complement

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM