java 判斷整數二進位制中1的個數
阿新 • • 發佈:2019-02-07
題目:
請實現一個函式,輸入一個整數,輸出該數二進位制中1的個數。
解法1:考慮到輸入的整數可能是負數,所以不能使用右移運算,這裡可以採取左移運算。這個解法中迴圈的次數等於整數二進位制的位數。比如java int類位元組為32位,則要迴圈32次
public int numberOf1(int n){
int count = 0;
int flag = 1;
while(flag!=0){
if((n&flag)!=0){
count++;
}
flag = flag<<1 ;
}
return count;
}
解法2:把一個整數減去1,再和原整數做運算,會把該整數最右邊一個1變成0,那麼一個整數的二進位制表示有多少個1,就可以進行多少次這樣的操作。所以優化的演算法如下:
public int numberOf1(int n){
int count = 0;
while(n!=0){
n = n&(n-1);
count++;
}
return count;
}