天天看點

劍指offer: 二進制中1的個數(位運算)

題目描述

輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼表示。

分析:

可以通過每次與1,判斷最後一位是否為1,然後右移。移動的次數為位數,與機器字長有關,可以通過sizeof得出字結束,然後乘以8.

代碼:

int  NumberOf1(int n) {
    if(n==0) return 0;
    int bitLen = sizeof(n)*8;
    int count = 0;
    for(int i=0;i<bitLen;i++){
        if((n & 1) == 1)
            count++;
        n = n>>1;
    }
    return count;
}