尋找一個整數二進制表示中1的個數

    最基本的做法是不斷的除以2,直到結果爲0,這裏做除法是一個比較耗時的操作。這裏給出一個比較快速的算法(核心思想:去掉最低位的1):

    代碼1:

a不斷地與自己的相反數-a按位相與(-a相當於a按位取反後加1),相當於排除最右邊的1,然後直到該數變爲0:

#include<stdio.h>

int main() {
    int a, b;
    int count = 0;
    scanf("%d", &a);
    while(a) {
        count++;
        b = a & (-a);//最低位的1
        a -= b; // 去掉了最低位的1
    }
    printf("%d\n", count);
}

    代碼2:

a不斷地與(a - 1)按位相與,直至爲0:

#include<stdio.h>  
  
int main() {  
    int a, b;  
    int count = 0;  
    scanf("%d", &a);  
    while(a) {  
        count++;  
        a &= (a -1); //去掉最低位的1
    }  
    printf("%d\n", count);  
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章