1

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

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

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

这足够了吗?

4

2 回答 2

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 用于负数。

于 2013-09-09T18:39:14.437 回答
1

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

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

或者

if (((a ^ b) & 0xFFFFFFFFFF00000000L) == 0)
于 2013-09-09T18:40:14.337 回答