Java 如何比较两个long中的上40位

Java 如何比较两个long中的上40位,java,bit-shift,bits,endianness,Java,Bit Shift,Bits,Endianness,我有一个识别无效输入的长值,它应该在高位40位包含0。所以每次我得到一个新的输入,我都要比较它的上40位,以验证它们是否为0,以确保它不是无效的 long invalid_id = 0; long input ; //some input if ((input << 24) == id) { // invalid } long无效_id=0; 长输入//一些输入 如果((输入您希望使用右移运算符(有两个)并将值右移: if ((input >>> 24)

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

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

if ((input << 24) == id) {
   // invalid
}
long无效_id=0;
长输入//一些输入

如果((输入您希望使用右移运算符(有两个)并将值右移

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放入负数。

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

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.


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

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


你的意思是把“long invalid_id=0;”?在“invalid”和“id”之间的空格可能会导致错误。你的思路是正确的,但是……试着想象你的整数是写在纸上的作为一个64 1和0的二进制数。左40位是您要比较的高位。当您使用
时,如果
无效id
是一个常数,在整个程序中始终相同,最好将其设置为
静态final
;此外,您可能希望将
无效id
设置为大写,因为这是usu常量的al约定。您的意思是放置“long invalid_id=0;”?在“invalid”和“id”之间的空格可能会导致错误。“invalid”和“id”之间的空格可能会导致错误。您在正确的轨道上,但是…尝试想象您的整数是(在纸上)写的作为一个64 1和0的二进制数。左40位是您要比较的高位。当您使用
时,如果
无效id
是一个常数,在整个程序中始终相同,最好将其设置为
静态final
;此外,您可能希望将
无效id
设置为大写,因为这是usu常数的al约定。