我有一个函数可以检查是否设置了 int 中的某个位。但我认为会有一个更快的实现,因为这个是线性的,不能是最有效的,虽然我知道 int 应该在 1 到 1024 之间。
public static int getBitPos(final int n) {
if (Integer.bitCount(n) != 1)
return Constants.UNDEFINED;
else {
for (int i = 0; i < Integer.MAX_VALUE; ++i) {
if (testBit(n, i))
return i;
}
}
return Constants.UNDEFINED;
}
testBit
以下标准函数在哪里:
public static boolean testBit(final int n, final int pos) {
int mask = 1 << pos;
return (n & mask) == mask;
}
但是桅杆有更快的方法,不是吗?如果我有值 17 并且我想知道是否设置了第 4 位(n = 8)?应该有一种更快的方法来检查是否设置了 n=8 的位...
希望你能帮我...
编辑1: 感谢您的支持。评论和答案使我误入歧途。我错误地设置了值,这使得它比需要的更复杂。我从来不擅长移位。如果我想设置第二位,我会这样设置值:
value = 2;
如果我也想设置第 4 位,我根据第 4 位添加值:
value += 8;
所以值为 10,并设置了第 2 位和第 4 位。因此,我将数字保存在班级中,而不是位位置(8 作为值,而不是 4 用于第 4 位,...)。更改此设置后,我可以摆脱不必要的功能,这太过分了!感谢大家的帮助!