我有以下价值:
int x = -51232;
Java 整数是 32 位的,所以在二进制中应该是这样的:
10000000000000001100100000100000
左边的符号位设置为1
因为x
是负数。
然后我做手术
x = (x & Integer.MAX_VALUE);
Integer.MAX_VALUE
是2147483647
并且在二进制中是:
01111111111111111111111111111111
左侧为 0,因为值为正。
那么为什么x & Integer.MAX_VALUE
yield呢2147432416
?运算AND
符应该只检索x
和Integer.MAX_VALUE
共有的位,这应该等同于-x
(因为它们不共享相同的符号位)。
这里发生了什么?
潇湘沐
蓝山帝景
相关分类