这是一个非常基本的问题,但我从来没有完全说服自己我对“没有区别”的直观回答是正确的,所以也许有人有一个很好的方法来理解这一点:
如果我想要对 Java 中的一种原始数字类型做的只是按位算术,我可以简单地将其视为无符号值还是我需要避免负数,即始终将最高位设置为 0 ? 例如,我可以像使用无符号 32 位数字一样使用 int,还是应该只使用最低 31 位?
我正在寻找尽可能一般的答案,但让我举个例子:假设我想存储 32 个标志。如果我使用类似的东西,我可以将它们全部存储在一个 int 中吗
store = store & ~(1 << index) | (value << index)
设置标志和index
类似的value
东西
return (store & (1 << index)) != 0
检索标志index
?index
或者,如果我将标志设置为31 为 1 ,我是否会遇到此代码或类似代码的任何问题?
我知道我需要始终使用 >>> 而不是 >> 进行右移,但这是唯一的问题吗?或者当我使用最高位时,是否会出现与负数的二进制补码表示相关的其他问题?