2
int fn(unsigned int x)
{
int count = 0 ;
for(; x!=0; x&=(x-1))
count ++;
return count;
}
我在編譯器中試過了,但無法弄清楚發生了什麼。我認爲這與x
中的位數有關,但是什麼?返回以下函數是什麼?
int fn(unsigned int x)
{
int count = 0 ;
for(; x!=0; x&=(x-1))
count ++;
return count;
}
我在編譯器中試過了,但無法弄清楚發生了什麼。我認爲這與x
中的位數有關,但是什麼?返回以下函數是什麼?
我解釋你做了什麼:)
根據你的代碼,下面會發生,如果x = 5
1)在循環的第一次迭代中,
a) condition check : .... 0101(X) ! = 0 ,
b) body : count will be 1 ;
c) increment part : .... 0101 &= .... 0100 => .... 0100
2)第二次迭代
a) condition check : .... 0100(X) ! = 0 ,
b) body : count will be 2 ;
c) increment part : .... 0100 &= .... 0011 => .... 0000
計數等於2,它是X中設置的位數(5)
這是一個bit trick。 :)
您將返回的位數設置爲1
。
+1表示該鏈接:) – 2013-04-08 10:49:23