判斷一個整數二進位制下1的個數
阿新 • • 發佈:2018-12-09
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】資料結構與演算法分析