我需要用 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 可以随心所欲地大。
16^(n - i -1)
=2^(4 * (n - i -1))
2^x
=1 << x.
因此:16^(n-i-1)
=1 << (4 * (n -i -1))
(使用^
符号表示“的力量”,而不是 XOR)
更通用的方式:
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;
}