我有一个很长的值来识别无效输入,它应该在高40位中包含0。所以每当我得到一个新输入时,我都要比较它的高40位来验证它们是否为0以确保它是无效的。
long invalid_id = 0;
long input ; //some input
if ((input << 24) == id) {
// invalid
}
这是否足够?
答案 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)