请求修正:计算两个给定数字总置位位数量的C++代码
问题:计算两个数字的总置位位数量
题目要求统计两个给定数字二进制表示中1的个数之和。示例输入为2和3:2的二进制是10(含1个1),3的二进制是11(含2个1),总置位位数量为3。以下是编写的C++代码,但无法得到预期输出:
#include <iostream> using namespace std; int bit(int n1, int n2){ int count = 0; while(n1 != 0 && n2 != 0){ if(n1 & 1 || n2 & 1) { count++; } n1 >> 1; n2 >> 1; } return count; } int main() { int a; cin >> a; int b; cin >> b; cout << bit(a,b); return 0; }
预期输出:3
错误分析与修正
- 循环条件错误:原代码使用
n1 != 0 && n2 != 0,会导致其中一个数变为0时停止循环,漏掉剩余置位位,应改为n1 != 0 || n2 != 0; - 移位操作未赋值:
n1 >> 1和n2 >> 1仅计算移位结果但未更新原变量,应改为n1 >>= 1和n2 >>= 1; - 统计逻辑错误:原代码只要其中一个位为1就加1,无法正确统计两个位都为1的情况(此时应该加2),需分别判断每个数的当前位并累加。
修正后的代码
#include <iostream> using namespace std; int bit(int n1, int n2){ int count = 0; while(n1 != 0 || n2 != 0){ if(n1 & 1) { count++; } if(n2 & 1) { count++; } n1 >>= 1; n2 >>= 1; } return count; } int main() { int a, b; cin >> a >> b; cout << bit(a,b); return 0; }
内容的提问来源于stack exchange,提问作者Harsh Singh
相关产品推荐
相关产品推荐

