寫一個函數返回參數二進制中1的個數
阿新 • • 發佈:2019-02-07
\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的個數