x&(x-1)的使用

  • 计算数的二进制1的个数
  • 判断是否为2的次方数

将x转为二进制,计算1的数目

1
2
3
4
5
6
7
8
int func(int x){
int count = 0;
while(x){
count++;
x = x & (x - 1);
}
return count;
}

每执行一次x = x & (x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1会将该二进制最右边的一个1变为0。

判断数x是否为2的次方数

1
2
3
int func(int x){
return x && (x & (x - 1)) == 0;
}

原理同上,此外要注意==的优先级高于&,且x不能为0。

Contents
  1. 1. 将x转为二进制,计算1的数目
  2. 2. 判断数x是否为2的次方数
|