按位“&”长?

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

例如:

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

我希望b的值为0x567890ab

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

Solutions Collecting From Web of "按位“&”长?"

尝试这个:

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

0xffffffffinttypes的文字,用于执行& long它被提升为long by sign extension ,因此它变成0xffffffffffffffff 。 要避免符号扩展,您需要将其写为longtypes的文字: 0xffffffffL

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

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

因此,由于0xffffffff为-1作为int,因此将其转换为-1作为long,或0xffffffffffffffff

尝试使用带有一些前导零而不是32位值的长值进行按位AND。 现在你基本上没有对这个号码做任何事情。