我有一个函数来检查是否设置了一个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;
}
Run Code Online (Sandbox Code Playgroud)
testBit
以下标准功能在哪里:
public static boolean testBit(final int n, final int pos) {
int mask = 1 << pos;
return (n & mask) == mask;
}
Run Code Online (Sandbox Code Playgroud)
但是桅杆是一种更快的方式,不存在吗?如果我有值17并且我想知道第4位(n = 8)是否已设置?应该有一种更快的方法来检查是否设置了n = 8的位...
希望你能帮我...
编辑1: 感谢您的支持.评论和回答让我误解了.我错误地设置了值,这使得它比需要的更复杂.我从不擅长换位.如果我想要设置第二位,我设置这样的值:
value = 2;
Run Code Online (Sandbox Code Playgroud)
如果我也想设置第4位,我根据第4位添加了值:
value += 8;
Run Code Online (Sandbox Code Playgroud)
因此值为10,并设置了第2和第4位.所以我把数字保存在我的班级中,而不是位位置(8为值,而不是第4位为4,......).改变这一点后,我可以摆脱我不必要的功能,这是超过顶部!谢谢大家的帮助!
如果只有一个代码,则代码始终返回最低位1.你可以这样做:
int foo = whatever;
int lowestSetBit = Integer.numberOfTrailingZeros(foo) + 1;
Run Code Online (Sandbox Code Playgroud)
你的代码就是
public static int getBitPos(final int n) {
if (Integer.bitCount(n) == 1)
return Integer.numberOfTrailingZeros(n) + 1;
return Constants.UNDEFINED;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1176 次 |
最近记录: |