n&(n-1) 的用法
- 求某一个数的二进制表示中1的个数
while (n >0 ) {
count ++;
n &= (n-1);
}
- 判断一个数是否是2的方幂
n > 0 && ((n & (n - 1)) == 0 )
- 计算N!的质因数2的个数。
容易得出N!质因数2的个数 = [N / 2] + [N / 4] + [N / 8] + …. 下面通过一个简单的例子来推导一下过程:N = 10101(二进制表示) 现在我们跟踪最高位的1,不考虑其他位假定为0, 则在
[N / 2] 01000
[N / 4] 00100
[N / 8] 00010
[N / 8] 00001
while(n){
n = n << 1;
count += n;
}
-
Previous
Lowest Common Ancestor of Tree -
Next
leetcode 108. Convert Sorted Array to Binary Search Tree