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

判斷一個整數二進位制下1的個數

1.最容易想到的就是 n&1 得到最後一位是不是 1 ,然後再將 n>>1 這樣迴圈(int)32次就可以得到1的個數,但是這樣n為負數時會陷入死迴圈

2.不如換一個思路設定一個 i ,每次讓i>>1這樣就不會對n進行修改,避免了死迴圈

public static int getNum3(int n) {
        if(n == 0)
            return 0;

        int count = 0;
        int i = 1;
        while(i != 0){
            if((n & i) == i)
                count++;
            i = i << 1;
        }

        return count;		
}

3.n&(n-1)  每次都會將最右邊的1 變成 0,利用這個特性

public static int getNum(int n) {
		int count = 0;
		
		while(n!=0) {
			count++;
			n = n & (n-1);			
		}
		
		return count;
	}

4.一個有趣的遞迴求解 正整數 1 的個數,

只能正整數N是偶數,那麼n的二進位制中1的個數與N/2中1的個數是相同的

奇數 N中1的位數等於N/2 +1 中的個數

public static int getNum2(int n) {		
		if(n<2) 
			return n;
		
		return n%2+getNum2(n/2);
	}

參考了

【1】資料結構與演算法分析