【C程序设计语言第二版】2-9:x& (x - 1)的妙用

知识点

x & (x - 1)可以快速计算x中1的个数,比单纯的移位运算收敛的更快,效率更高,为什么可以这样呢,我们观察到,x - 1实际上是把x的最后一个1变成了0,这样与运算后,可以最右边的1就被清除掉了。

int func(x) 
{ 
    int countx = 0; 
    while(x) 
    { 
          countx ++; 
          x = x&(x-1); 
     } 
    return countx; 
} 

另外,我们还能借助上式子判断x是否为2的n次方,如果x为2的n次方,则与运算后结果会为0。


int func(int x)
{
    if( (x&(x-1)) == 0 )
        return 1;
    else
        return 0;
}

发布了128 篇原创文章 · 获赞 20 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/u011544909/article/details/95803436
x
今日推荐