二進制中1的個數

位運算  

  題目:

請實現一個函數,輸入一個整數,輸出該數二進制表示中1的個數。例如,把9表示成二進制是1001,有2位是1因此,如果輸入9,則該函數輸出2

  分析:

tips:負數在移位後仍爲負數,最高位爲11移位後,最高位的符號位仍爲1

數字右移,判斷第一位爲1的個數,直到數變爲零,類似於十進制轉二進制的數學算法,但不適用於負數。

修改爲,把1左移,每次判斷一位,直到1變成0

代碼如下:

int NumberOf1(int n)

{

unsigned int flag = 1;

int count = 0;

while(flag){

if(n & flag)

count++;

flag = flag<<1;

}

return count;

}

第二種,數n,對它作n&(n-1)的操作,會把它二進制中第一個1去掉。比如,

n = 1101,

n-1=1100,

n=n&(n-1)=1100

繼續:

n=1100,

n-1=1011,

n&(n-1)=1000

……

直到n變成0

代碼如下:

int numberof1(int n )

{

int count = 0;

while(n){

n = n&(n-1);

count++;

}

return count;

}

聲明:題目和程序來自劍指offer,分析和註釋自己寫的備忘,侵刪

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章