题目传送地址: ​​https://leetcode.cn/problems/powx-n/​

Leetcode50. Pow(x, n)_位运算

代码如下:

//用位运算来解题
public static double myPow(double x, int n) {
//13=8+4+1 1101
double result = 1;
double carry = x;
boolean sign = true;
long abVal=n; //之所以用long,是因为n可能是int类型的最小值-2147483648,这样的话相反数就会溢出了
if (n < 0) {
abVal = -abVal;
sign = false;
}
while (abVal > 0) {
int i = (int) (abVal & 1);
abVal = abVal >> 1;
if (i == 1) {
result = result * carry;
}
carry = carry * carry;
}
if (!sign) {
result = (1 / result);
}
return result;
}