1:求下面函數的返回值 -- 統計1的個數----x&(x-1)表達式的意義
[cpp]
int func(int x)
{
int countx = 0;
while(x)
{
countx++;
x = x&(x-1);
}
return countx;
}
假定x = 9999
10011100001111
答案: 8
思路: 將x轉化為2進制,看含有的1的個數。
注: 每執行一次x = x&(x-1),會將x用二進制表示時最右邊的一個1變為0,因為x-1將會將該位(x用二進制表示時最右邊的一個1)變為0。
2:判斷一個數(x)是否是2的n次方
[cpp]
#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) == 優先級高於 &