今天做题的时候遇到这样一道题,发现了一个有趣的规律。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12int f(unsigned int n) { unsigned int m=0; for(m=0;n;++m) { n&=(n-1); } return m; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
则f(2486)的返回值是( )
A:7
B:10
C:15
D:1243
这道题乍看一眼数字比较大有点难算,其实理解后发现是在求2486转化成二进制数后含1的个数。
2486=1001 1011 0101,其中有7个1,故选A。
求十进制数转成二进制数后其中1的个数方法:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14//求1的个数 int numOfOne(x) { int count=0; while(x) { count++; x=x&(x-1); } return count; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
最后
以上就是高大钻石最近收集整理的关于十进制转换为二进制后一的个数的全部内容,更多相关十进制转换为二进制后一内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复