x&(x-1)的巧用:用于判断x是否为2的n次幂,计算二进制1的个数

 

最近学到  x&(x-1) 这个式子的两个用法,跟大家分享一下。

作用:将x的二进制表示从最低位起第一个为1的位清0;

一、快速判定x是否为2^n幂。

如果x!=0  且x&(x-1)==0,则x为2的n次幂。(当然不能判定n是多少)

前提条件:x数据类型应为整数;

#define ispow2(x) ( (x)<= 0? 0 :( (x)&((x)-1) )==0  )

 

二、x=x&(x-1);

相关应用:计算x二进制表示中1的个数。

不用一位一位的移位了。

c代码:

int count=0;

while(x)

{

count++;

 x&=x-1;// x=x&(x-1);

}

 

在此 向第一个想到这些方法的人致敬!

点赞