題:請編寫一個函數,讓它把一個指定整數的二進制表示形式中的“1”的個數統計出來。
這題在JAVA下有幾個解法:
1。設計一個把十進制轉換爲二進制的算法,再對其統計。
2。用Integer.toBinaryString方法,先把十進制轉換爲二進制,再對其統計。
3。因爲整數在計算機中的表示形式就是二進制,所以我們無需對其轉換,運用位操作符可直接操作它的二進制數。我們把1作爲掩碼,與要統計的整數進行&運算,就可判斷整數的最低位是否爲1了,然後對整數進行右移>>>1位(注意:是>>>,不是>>,因爲如果整數是負數,前者在移位後會全補上零,這是JAVA特有的符號,而後者會根據符號位進行補全)。
public static int numOnesInBinary(int num){
int count = 0;
while(num != 0){
if((num & 1) == 1) count++;
num >>>= 1;
}
return count;
}
int count = 0;
while(num != 0){
if((num & 1) == 1) count++;
num >>>= 1;
}
return count;
}