黑科技一:
n & (n-1)
例子:
剑指offer15题,二进制中1的个数
class Solution {
public:
int hammingWeight(uint32_t n) {
int count = 0;
while(n){
n = n & (n-1);
++count;
}
return count;
}
};
黑科技二:
把最右边那个1的左边都变为0;
n = n & -n;
例子:
-n = ~n + 1
看下面这个过程:
12 01100
~12 10011
1
-12 10100
& 00100
常用二进制操作