gpt4 book ai didi

java - 求二的幂的最快方法?

转载 作者:行者123 更新时间:2023-12-02 17:30:28 24 4
gpt4 key购买 nike

我正在编写一些代码,我希望能够快速分解出 2 的幂。

我注意到以二进制表示的具有 2 次幂的数字有一些方便之处:

27959296 = 0b1101010101010000000000000 = 110101010101 * 10000000000000 = 3413 * 2^13

如果我可以将这些零移出,我就会剩下其他因素。在浏览了 google、SO 和其他一些地方,并使用 Wolfram|alpha 后,我看不出有什么好方法可以在每个操作上迭代并除以二/位移位。如果我将其转换为字符串,我也许可以使用字符串操作来分割这些零。

我尝试使用日志规则来说明:

log base 2(27959296) = log(3413 * 2^13)/log(2) = 13+ log(3413)/log(2)

但我缺少区分 13 和 24.73 的 log(3413)/log(2) 的逻辑......这将给出一个“简单”的答案。

最后有一个方法 numberOfTrailingZeros 给了我一个很好的答案,但我不知道它是如何工作的,也不知道它有多快。

这是该方法的 SSCCE(从 here 中抓取):

import java.lang.*;

public class IntegerDemo {

public static void main(String[] args) {

int i = 27959296;
System.out.println("Number = " + i);

/* returns the string representation of the unsigned integer value
represented by the argument in binary (base 2) */
System.out.println("Binary = " + Integer.toBinaryString(i));

/* returns the number of zero bits following the lowest-order
("rightmost") one-bit */
System.out.print("Number of trailing zeros = ");
System.out.println(Integer.numberOfTrailingZeros(i));
}
}

最快的方法是什么?我在位移位方面走错了路吗?

最佳答案

Integer.numberOfTrailingZeros 速度非常快,而 i >> Integer.numberOfTrailingZeros(i) 可能是最快的替代方案。

关于java - 求二的幂的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18540498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com