题目
请实现一个函数,输入一个整数,输出该数二进制表示中 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 }
运行测试
小结
注意区分正整数移位和负整数移位的区别。