You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求修正:计算两个给定数字总置位位数量的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:20:50