n&(n-1)作用:将n的二进制表示中的最低位为1的改为0。
应用:
1. 求某一个数的二进制表示中1的个数
while (n > 0 ) {
count ++;
n &= (n-1);
}
2 判断一个数是否是2的方幂
n > 0 && ((n & (n - 1)) == 0 )
Leetcode 231
public class Solution {
public boolean isPowerOfTwo(int n) {
int count = 0;
while(n>0){
count += n&1;
n>>=1;
}
return count ==1;
}
}
如 n&1 就是n变成二进制,然后和1作(&)与运算,同时有1则产生1
如 n&(n-1) 假如n=5 则5&4 ==》101 & 100 = 1