写一个函数返回参数二进制中1的个数
Posted The Ocean
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写一个函数返回参数二进制中1的个数相关的知识,希望对你有一定的参考价值。
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的个数的主要内容,如果未能解决你的问题,请参考以下文章