按位“&”长?

时间:2011-02-16 14:54:56

标签: java android

我想从多个long类型中获取至少32位,所以我执行按位操作“&”在位数为0xFFFFFFFF的数字上,但结果不正确,它仍然包含其他位。

例如:

long a = 0x1234567890ab; 
long b = (a & 0xffffffff);

我希望b的值为0x567890ab

但实际上,它仍然是0x1234567890ab

3 个答案:

答案 0 :(得分:45)

试试这个:

long a = 0x1234567890ab;  
long b = (a & 0xffffffffL);

0xffffffffint类型的文字,用&执行longsign extension将其提升为long类型,因此它变成0xffffffffffffffff。要避免签名扩展,您需要将其写为long类型的文字:0xffffffffL

答案 1 :(得分:3)

使用0xffffffffL会有什么不同吗?

我认为会发生的事情是0xffffffff上升到很长时间,并且因为int和long都被签名,所以它会尝试保持相同的符号。

所以,因为0xffffffff是-1作为int,它被转换为-1作为long,或者0xffffffffffffffff

答案 2 :(得分:0)

尝试使用带有一些前导零而不是32位值的长值进行按位AND。现在你基本上对这个数字一无所知。