我有一个标识无效输入的长值,它应该在高 40 位中包含 0。所以每次我得到一个新的输入时,我都要比较它的高 40 位,以验证它们是否为 0,以确保它不是无效的。
long invalid_id = 0;
long input ; //some input
if ((input << 24) == id) {
// invalid
}
这足够了吗?
我有一个标识无效输入的长值,它应该在高 40 位中包含 0。所以每次我得到一个新的输入时,我都要比较它的高 40 位,以验证它们是否为 0,以确保它不是无效的。
long invalid_id = 0;
long input ; //some input
if ((input << 24) == id) {
// invalid
}
这足够了吗?
您想使用右移运算符(有两个)并将值右移:
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 用于负数。
如果要检查两个长值中的前 40 位是否相同
long a, b;
if (((a ^ b) >>> 24) == 0) // top 40 bits are the same.
或者
if (((a ^ b) & 0xFFFFFFFFFF00000000L) == 0)