求一個數二進位制位中有多少個 1 的不同解法
阿新 • • 發佈:2018-12-26
*返回一個數的二進位制表達中1的個數。*
#include<stdio.h>int main(){ unsigned int i; scanf("%d",&i); printf("%d的二進位制表達中有 %d 個1",i,count_one_bits(i)); return 0;}int count_one_bits(unsigned int m){ int n,count; // 返回 1的位數 n = m; count = 0; while(n % 2 == 0) n = n / 2; while(n % 2 == 1) { count++; do { if (n != 0) n = n / 2; else break; } while(n % 2 == 0); } return count;}
這就是最容易想到的辦法,不斷地除2模2取餘,下面給出另外一種方法(省略部分語句)
...i = 32;while(i--){ if(num & 1 == 1) count++; num = num>>1;}
這種方法就是向右移位,使最低位&上1進行判斷,還有一種更為高效的方法
int count_one_bit(int num){ int count = 0; while(num) { count++; //只要一個數不為0,則二進位制表達中至少有一個1 num = num & (num-1);//沒執行一次這條語句,其實就是使該數最低位的一個1置成0 } return count;}