Java-如何从给定值中获取位号(索引)?
我有一个单一的数字,它是2的保证幂(1,2,4,8,16等等)。 如何从这个数字中获取“位索引” 比方说,我得到了数字“8”->我寻求的答案是“3”(位#3) 当然,我可以构建一个数组或字典(键是数字,值是位#)。。。假设16个索引从值到位# 我也可以做一个Java-如何从给定值中获取位号(索引)?,java,Java,我有一个单一的数字,它是2的保证幂(1,2,4,8,16等等)。 如何从这个数字中获取“位索引” 比方说,我得到了数字“8”->我寻求的答案是“3”(位#3) 当然,我可以构建一个数组或字典(键是数字,值是位#)。。。假设16个索引从值到位# 我也可以做一个 int i = 0, counter = 1; while (counter != needed_value) { counter *= 2; i++; } // now "i" contains my bit# 但是有没
int i = 0, counter = 1;
while (counter != needed_value) {
counter *= 2;
i++;
}
// now "i" contains my bit#
但是有没有。。。更奇特的方法?您只需找到整数中的第一个有效位:
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();
}
public静态可选getFirstSignifictBit(int src){
对于(int i=0;i<32;i++){
如果((src&1)==1){
第(i)项的可选择返回;
}
src>>=1;
}
返回可选的.empty();
}
没什么特别的,只是java.lang.Integer
类提供的(尽管实现有些特别):
当2^x=y时,则log2(y)=x。你知道y,所以解决方案是:
Math.log(y)/Math.log(2)
这是因为logb(a)=log(a)/log(b)。递归怎么样
private static int bitIndex(int n) {
if (n <= 1)
return 0;
return 1 + bitIndex(n/2);
}
私有静态int-bitIndex(int-n){
如果(我想你只是在寻找这个数字的2底对数…对吗?…也许?…看起来有点不确定这意味着什么?看起来不错-非常感谢-没有意识到这一点!是的…看看实现…哇:)@GrisgramInteger
类有几个这样有用的宝石-看看highestOneBit()
,lowstonebit()
,bitCount()
,reverseBytes(),reverseBytes()
谢谢-是的,我明白了-有一些有趣的事情(reverseBytes!)可以帮上大忙
int lowestOneBit = Integer.numberOfTrailingZeros(needed_value);
private static int bitIndex(int n) {
if (n <= 1)
return 0;
return 1 + bitIndex(n/2);
}