java - 如何比较两个 long 的高 40 位

标签 java bit-shift bit endianness

我有一个很长的值来标识无效输入,它应该在高 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 放入负数。

关于java - 如何比较两个 long 的高 40 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18704683/

相关文章:

java - 删除二叉树中的节点

java - 检查一个数字是否在二维数组中,并打印它所在的行

python - 安装基于 pyproject.toml 的项目所需的错误 : Could not build wheels for coincurve,

c - 在 C 中将两个 8 位寄存器读入 ADXL362 的 12 位值

algorithm - 如何计算大小为n、设置了k位且位值发生c次变化的位序列有多少个?

Java Collections.sort() 不排序

java - 以编程方式添加的元素未出现在 fragment 中

java - ConcurrentHashMap 中位移运算符的使用

c - 负值左移 0 个位置?

c - 如何使用使用 128 位二进制和 4 位多项式模的 C 编写模块化运算?