最近学到 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);
}
在此 向第一个想到这些方法的人致敬!