10.二進位制中1的個數
阿新 • • 發佈:2018-12-17
二進位制中1的個數
題目描述
輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。
具體實現:
解法一:
解題思路:為了避免移位n的時候出現死迴圈的問題,建立一個flag=1來和n與操作,來判斷n的最低位是否為1。
接著把flag左移移位得到2,再和n與操作,就能判斷n的次低位是否為1,…這樣迴圈左移,每次都能判斷n的一位是否為1.
public class Solution {
public int NumberOf1(int n) {
int flag = 1;
int sum = 0;//1的個數
while(flag != 0) { //flag左移到最後溢位會變成0則跳出迴圈
if( (flag & n) != 0) { //flag(其中只有一位有1)和n做與操作,判斷n中當前位是否是1.
sum++;
}
flag = flag << 1;//flag左移一位
}
return sum;
}
}
解法二:
解題思路:把一個整數減去1,再喝原整數做與運算,會把該整數最右邊一個1程式設計0.那麼一個整數的二進位制表示中有多少個1,就可以進行多少次這樣的操作。
public int NumberOf1(int n) {
int sum = 0;
while( n != 0 ) {
++sum;
n = n & (n-1);//n去掉了最右邊的一個1
}
return sum;
}