我需要用bitshift替换Java中的Math.pow。
for (int i = n - 1; i >= 0; i--)
Math.pow(16, n - i - 1)
其中n是十六进制数的长度 13304fb意味着n = 7 它基本上是将十六进制转换为十进制。
现在我需要用Bitshift替换Math.pow。我无法弄清楚,因为n可以达到它想要的那么大。
答案 0 :(得分:5)
16^(n - i -1)
= 2^(4 * (n - i -1))
2^x
= 1 << x.
因此:16^(n-i-1)
= 1 << (4 * (n -i -1))
(使用^
符号表示“对于”的权力,而不是XOR)
答案 1 :(得分:0)
更通用的方式:
public static double posIntPow(final double pVal, final int pPow) {
double ret = 1;
double v1, v2;
int n = pPow;
v1 = pVal;
if ((n & 1) == 1) {
ret = pVal;
}
n = n >>> 1;
while (n > 0) {
v2 = v1 * v1;
if ((n & 1) == 1) {
ret = ret * v2;
}
v1 = v2;
n = n >>> 1;
}
return ret;
}