面试题八 二进制中 1 的个数

题目

  请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。

分析

  首先要明白:一个整数和它减去 1 的结果做与运算,相当于把它最右边的 1 变成 0

  这样可以用一个循环程序解决这个问题,每次循环都让整数和它减去 1 的结果做或运算,循环判定该数是否为 0 ,这样,循环的次数即是该数中有 1 变成 0 的次数,也即该数中 1 的个数。

代码实现

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int numberOf1(int n) {
 6     int count = 0;
 7 
 8     while (n) {
 9         ++count;
10         n = (n-1) & n;
11     }
12 
13     return count;
14 }
15 
16 int main()
17 {
18     int n;
19     cout << "请输入要判断的整数:" << endl;
20     cin >> n;
21 
22     int result = numberOf1(n);
23 
24     cout << "整数 " << n << " 的二进制表示中有 " << result << " 个为 1 的位" << endl;
25 
26     return 0;
27 }

运行测试

  

小结

  注意区分正整数移位和负整数移位的区别。

 

posted on 2014-04-10 11:58  空山悟  阅读(234)  评论(0编辑  收藏  举报

导航