【发布时间】:2019-12-03 00:14:50
【问题描述】:
我有一个名为aFunc() 的函数,它正在执行一些按位运算。我了解该程序在做什么,但我无法确定这样做的原因是什么。我将这个函数值从 0 传递到 49,但我仍然无法总结这个函数的用途。你对这个函数的作用有什么建议吗?绝对不是 1 或 2 的补码。
int afunc( unsigned int i ) {
int c = 0;
while( i ) {
if( i & 1 ) { c++; }
i >>= 1;
}
return c;
}
for (int i = 0; i < 50; i++)
{
printf("%d returns %d.\n", i, afunc(i));
}
下面的输出:
0 returns 0.
1 returns 1.
2 returns 1.
3 returns 2.
4 returns 1.
5 returns 2.
6 returns 2.
7 returns 3.
8 returns 1.
9 returns 2.
10 returns 2.
11 returns 3.
12 returns 2.
13 returns 3.
14 returns 3.
15 returns 4.
16 returns 1.
17 returns 2.
18 returns 2.
19 returns 3.
20 returns 2.
21 returns 3.
22 returns 3.
23 returns 4.
24 returns 2.
25 returns 3.
26 returns 3.
27 returns 4.
28 returns 3.
29 returns 4.
30 returns 4.
31 returns 5.
32 returns 1.
33 returns 2.
34 returns 2.
35 returns 3.
36 returns 2.
37 returns 3.
38 returns 3.
39 returns 4.
40 returns 2.
41 returns 3.
42 returns 3.
43 returns 4.
44 returns 3.
45 returns 4.
46 returns 4.
47 returns 5.
48 returns 2.
49 returns 3.
【问题讨论】:
-
统计1的位数。
标签: c bit-manipulation bitwise-operators bitwise-and