给定一个数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的总个数

  1. int bitCount(int num) {
  2. int ans = 0, x = num;
  3. while (x != 0) {
  4. ans++;
  5. x -= lowbit(x);
  6. }
  7. return ans;
  8. }
  9. int lowbit(int x) {
  10. return x & -x;
  11. }