如何比较两个长整数中的高40位

时间:2013-09-09 18:35:09

标签: java bit-shift bits endianness

我有一个很长的值来识别无效输入,它应该在高40位中包含0。所以每当我得到一个新输入时,我都要比较它的高40位来验证它们是否为0以确保它是无效的。

long invalid_id = 0;
long input ; //some input 

if ((input << 24) == id) {
   // invalid
}

这是否足够?

2 个答案:

答案 0 :(得分:3)

您希望使用右移位运算符(有两个)并将值右移

if ((input >>> 24) == 0) {
    // high-order 40 bits are all 0.
}

或者,您可以使用以下命令进行位掩码:

if ((input & 0xFFFFFFFFFF000000L) == 0) {
    // high-order 40 bits are all 0.
}

请注意,>>>将高位设为0,>>将0设为正数,1设为负数。

答案 1 :(得分:1)

如果要检查两个长值中前40位是否相同

long a, b;
if (((a ^ b) >>> 24) == 0) // top 40 bits are the same.

if (((a ^ b) & 0xFFFFFFFFFF00000000L) == 0)