位运算之x&(x-1)
x&(x-1)有两种用途:
1.通过与0比较判断x是否是2的n次幂
如果是,那么x-1后最高位1会后退一位,剩余位都是1,所以x>0&&(x&(x-1))==0,即是;否则不是。
【注意要打括号,“==”优先级高于‘&’】
2.判断x二进制有多少个1
通过x=x&(x-1),每一次赋值会且只会将最低位1变成0,那么有多少次while(x!=0)即有多少个1。
x&(x-1)有两种用途:
1.通过与0比较判断x是否是2的n次幂
如果是,那么x-1后最高位1会后退一位,剩余位都是1,所以x>0&&(x&(x-1))==0,即是;否则不是。
【注意要打括号,“==”优先级高于‘&’】
2.判断x二进制有多少个1
通过x=x&(x-1),每一次赋值会且只会将最低位1变成0,那么有多少次while(x!=0)即有多少个1。