按位“&”在长?

我想从多个longtypes中获得至less32位,所以我对位掩码为0xFFFFFFFF的数字执行按位操作“&”,但结果不正确,仍然包含其他位。

例如:

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

我期望b的值是0x567890ab

但实际上,它仍然是0x1234567890ab

尝试这个:

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

0xffffffff是一个inttypes的文字,用于执行& long ,通过符号扩展将其提升为longtypes,因此它变成0xffffffffffffffff 。 为了避免符号扩展,你需要把它写成longtypes的文字: 0xffffffffL

使用0xffffffffL有什么区别吗?

我认为会发生什么是0xffffffff得到长时间,因为int和long都被签名,它试图保持相同的符号。

所以,由于0xffffffff是一个int,所以它被转换为-1作为一个long,或0xffffffffffffffff

尝试做一个按位与与一个长的值与一些前导零而不是一个32位值。 现在你基本上什么都不做