我有一个单一的数字,保证是2(1、2、4、8、16等)的幂。 如何从该数字中获取“位索引”?
说,我得到数字“ 8”->我寻求的答案是“ 3”(位3)
1 -> 0
2 -> 1
4 -> 2
8 -> 3
16 -> 4
32 -> 5
..etc...
我当然可以构建一个数组或一个字典(键是数字,值是bit#)……说16个索引,以从值到bit#
我也可以做
int i = 0, counter = 1;
while (counter != needed_value) {
counter *= 2;
i++;
}
// now "i" contains my bit#
但是还有其他更花哨的方式吗?
答案 0 :(得分:3)
没什么好看的,java.lang.Integer
类提供的东西(尽管实现有些花哨):
int lowestOneBit = Integer.numberOfTrailingZeros(needed_value);
答案 1 :(得分:2)
当 2 ^ x = y 时, log 2 (y)= x 。您知道 y ,所以解决方案是:
Math.log(y) / Math.log(2)
这是因为 log b (a)= log(a)/ log(b)。
答案 2 :(得分:0)
您可以找到整数的第一个有效位:
public static Optional<Integer> getFirstSignificantBit(int src) {
for (int i = 0; i < 32; i++) {
if ((src & 1) == 1) {
return Optional.of(i);
}
src >>= 1;
}
return Optional.empty();
}
答案 3 :(得分:0)
递归如何!
Current:
<div class="bar">
<div class="progress" style="width: 50%">
<span>50</span>
</div>
</div>
Expected
<div class="bar2">
<div class="progress" style="width: 50%">
<span>50</span>
</div>
</div>