1. 程式人生 > >java 判斷整數二進位制中1的個數

java 判斷整數二進位制中1的個數

題目:

請實現一個函式,輸入一個整數,輸出該數二進位制中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;
    }