码迷,mamicode.com
首页 > 其他好文 > 详细

写一个函数返回参数二进制中1的个数

时间:2019-02-07 16:31:04      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:main   整数   移位   signed   col   输入   lse   bit   war   

 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的个数

标签:main   整数   移位   signed   col   输入   lse   bit   war   

原文地址:https://www.cnblogs.com/cuckoo-/p/10354835.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!