1. 程式人生 > >寫一個函數返回參數二進制中1的個數

寫一個函數返回參數二進制中1的個數

\n bsp main scanf pre 參數 多次 返回 def

8 二進制為:0000 1000=> 8/2=4 4/2=2 2/2=1(一的個數為1)
11 二進制為:0000 1011=> 11/2=5...1 5/2=2...1 2/2=1(一的個數為3)
31 二進制為:0001 1111=> 31/2=15...1 15/2=7...1 7/2=3...1 3/2=1...1 1/2=0(一的個數為5)
26 二進制為:0001 1010=> 26/2=13 13/2=6.. .1 6/2=3 3/2=1...1 1/2=0(一的個數為3)

發現規律:當一個整數多次除以二後,它的商和余數為一的個數就是整數對應二進制中1的個數

1.這種方法只能實現對正整數的求法。

 1 #include<stdio.h>
 2 
 3 int count_one_bits(unsigned int value)
 4 {
 5     int count = 0;
 6     while (value / 2 != 0)
 7     {
 8         if (value % 2 == 1)
 9         {
10             ++count;
11             value = value / 2;
12             if (value == 1)
13             {
14                 ++count;
15 continue; 16 } 17 } 18 else 19 { 20 value = value / 2; 21 if (value == 1) 22 { 23 ++count; 24 continue; 25 } 26 } 27 } 28 return count; 29 } 30 31 int main()
32 { 33 int i; 34 printf("請輸入數字:\n"); 35 scanf("%d", &i); 36 int num = count_one_bits(i); 37 printf("%d", num); 38 return 0; 39 }


2.應用 << >> 移位的方法

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<stdio.h>
 3 
 4 int Count_one_bits(int a)
 5 {
 6     int count = 0;
 7     while (a!=0)
 8     {
 9         if (a & 1 == 1)
10         {
11             ++count;
12             a = a >> 1;
13         }
14         else
15         {
16             a = a >> 1;
17         }
18     }
19     return count;
20 }
21 
22 int main()
23 {
24     //int c;
25     //int b = 6; //0000 0110
26     //int a = 11;//0000 1011
27     //           //printf("%d\n",a >> 1);//0000 0101 (5)
28     //           //printf("%d\n",a << 1);//0001 0110 (22)
29     //c = a & b;//2   0000 0010
30     //printf("%d", c);
31     int a;
32     printf("請輸入數字:\n");
33     scanf("%d",&a);
34     int count = Count_one_bits(a);
35     printf("%d",count);
36 
37     return 0;
38 }

寫一個函數返回參數二進制中1的個數