给定一个数n,求它的最低位1构成的数字lowbit(n)
例如:
4的最低位1构成的数字为4
5的最低位1构成的数字为1
6的最低位1构成的数字为2
7的最低位1构成的数字为1
8的最低位1构成的数字为8
求法:lowbit(n) = n & (-n)
注意:如果不想求最低位1构成的数字,而是相求除了最低位1之外的其它数位构成的数字怎么办?
例如:5的二进制表示为 0101
lowbit(5) = 1
n & (n -1) = 4
可以求其他位构成的数字大小
用途1:求一个整数二进制位为1的总个数
int bitCount(int num) {
int ans = 0, x = num;
while (x != 0) {
ans++;
x -= lowbit(x);
}
return ans;
}
int lowbit(int x) {
return x & -x;
}