申請SAE

如果您發現本博客的外觀很難看,那是因為部分外觀文件被中國.國家.防火.牆屏.蔽所致!
請翻~牆!

我的Wordpress博客的地址: http://zhuyf.tk/

2011年10月26日 星期三

位運算中 x&(x-1)表達式的意義

請看下面的函數:

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


假定x = 9999

則返回多少?

答案: 8

解析:9999的二進制的表示為10011100001111,看它的二進制表示中有幾個1。

其實這個函數的意義是統計X的二進制表示中1的個數。
 注: 每執行一次x = x&(x-1),會將x用二進制表示時最右邊的一個1變爲0,因爲x-1將會將該位(x用二進制表示時最右邊的一個1)變爲0。


【應用】
判斷一個數(x)是否是2的n次方
-------------------------------------
#include <stdio.h>

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

int main()
{
    int x = 8;
    printf("%d\n", func(x));
}
注:
(1) 如果一個數是2的n次方,那麼這個數用二進制表示時其最高位爲1,其餘位爲0。
(2) == 優先級高於 &

沒有留言:

張貼留言