
1 /****************************************
2 > File Name:test.c
3 > Author:xiaoxiaohui
4 > mail:1924224891@qq.com
5 > Created Time:2016年05月23日 星期一 21时04分35秒
6 ****************************************/
7
8 #include<stdio.h>
9
10 int SumOfBit(int num)
11 {
12 int count = 0;
13 int i = 0;
14
15 for(;i <= 32; i++)
16 {
17 if( (num & (1 << i)) == 1) //对应的bit位为1
18 {
19 count++;
20 }
21 }
22
23 return count;
24 }
1 /****************************************
2 > File Name:test1.c
3 > Author:xiaoxiaohui
4 > mail:1924224891@qq.com
5 > Created Time:2016年05月23日 星期一 21时24分40秒
6 ****************************************/
7
8
9
10
11 /*这种算法只适应于正数的情况, 当为num为负数时,在某些平台下会是死循环
12 这种算法如果是正数,则不用算32次循环了*/
13
14
15 #include<stdio.h>
16
17 int NumOfBit(int num)
18 {
19 int count = 0;
20
21 while(num != 0)
22 {
23 if( (num & 1) == 1)
24 {
25 count++;
26 }
27
28 num >> 1;
29 }
30
31 return count;
32 }
~
1 /****************************************
2 > File Name:test3.c
3 > Author:xiaoxiaohui
4 > mail:1924224891@qq.com
5 > Created Time:2016年05月23日 星期一 21时30分13秒
6 ****************************************/
7
8
9
10
11 /*这种算法最佳*/
12
13 #include<stdio.h>
14
15 int NumOfBit(int num)
16 {
17 int count = 0;
18
19 while(num != 0)
20 {
21 num = num & (num - 1);
22 count++;
23 }
24
25 return count;
26 }