按位"&"长?

Reg*_*ais 22 java android

我想从多个long类型中获取至少32位,因此我对位数为0xFFFFFFFF的数字执行按位操作"&",但结果不正确,它仍然包含其他位.

例如:

long a = 0x1234567890ab; 
long b = (a & 0xffffffff);
Run Code Online (Sandbox Code Playgroud)

我希望b的值为0x567890ab

但在实践中,它仍然是0x1234567890ab

axt*_*avt 45

试试这个:

long a = 0x1234567890ab;  
long b = (a & 0xffffffffL);
Run Code Online (Sandbox Code Playgroud)

0xffffffff是一个文本类型的int,用于执行&long它的推动键入long通过符号扩展,因此它变成0xffffffffffffffff.要避免符号扩展,您需要将其写为类型的文字long:0xffffffffL.

  • 这个答案和最初的问题使我免于花费很长时间来摆弄Eclipse Debugger!感谢关于_sign-extension_的解释和链接. (2认同)