n&1(和1做与):判断最后一位是不是1,是1的话,就可以res = res * x ,否则不是1,就保持原来的res不变
n>>1(向右位移):判断下一位是不是1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
classSolution{ public double myPow(double x, int n) { if(x == 0) return0; double res = 1; long b = n; //考虑到n的相反数可能越界 if(b<0){ x = 1/x; b = -b; } while(b > 0){ //按位和1做& if((b & 1) == 1) res *= x; x *= x; b = b >> 1; } return res; } }