获取位置而不是整数中最高的一位的值

时间:2017-12-11 13:29:25

标签: java

如何获得整数中最高位的位置而不是值?我知道我可以得到这样的价值:

1000

但是,我想获得最高位的位置 - 在这种情况下,它将是4(自8二进制== docker run,最高的一位是第四位。)

3 个答案:

答案 0 :(得分:2)

好吧,我们可以用数学方法做到这一点。

我们基本上希望从8获得4,从4获得3,从2获得2,从1获得等等。

这基本上是对数字进行log2并为其添加1。 log2类中没有java.lang.Math函数,但您可能知道:

logx(y) = log10(y) / log10(x)

所以我们可以这样做!

(Math.log10(Integer.highestOneBit(f)) / Math.log10(2)) + 1

答案 1 :(得分:0)

只需将它与numberOfTrailingZeros:

组合
int pos = Integer.numberOfTrailingZeros(Integer.highestOneBit(f))

答案 2 :(得分:-2)

您可能希望使用Integer.toBinaryString将整数转换为字符串,然后返回其长度。

例如:

String binaryString = Integer.toBinaryString(13);
System.out.println(binaryString.length()); <== gives 4

因为不会有任何前导零。