2013-04-08 66 views
2
int fn(unsigned int x) 
{ 
int count = 0 ; 
for(; x!=0; x&=(x-1)) 
    count ++; 
return count; 
} 

我在編譯器中試過了,但無法弄清楚發生了什麼。我認爲這與x中的位數有關,但是什麼?返回以下函數是什麼?

回答

0

我解釋你做了什麼:)

根據你的代碼,下面會發生,如果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)

9

這是一個bit trick。 :)

您將返回的位數設置爲1

+1

+1表示該鏈接:) – 2013-04-08 10:49:23