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

循环退出后vector数据丢失:十进制转二进制函数调用后容器为空

问题分析与修复

你的代码存在三个核心问题,导致vector为空或结果错误:

  • 循环条件错误:while (decimalNumber != 0) 会触发两个严重问题:一是当decimalNumber提前减至0时,后续二进制位不会补0;二是divisor最终会被除至0,触发除零异常,程序直接崩溃,导致vector无法正常填充。
  • 判断逻辑遗漏:if (decimalNumber > divisor) 没有处理decimalNumber == divisor的情况,会导致decimalNumber无法正确递减,进而生成错误的二进制位。
  • 位值计算逻辑不安全:用decimalNumber/divisor获取位值,当decimalNumber是divisor的多倍时(虽然你限定小于256,但逻辑上仍有风险),会得到大于1的结果,不符合二进制位只能是0/1的要求。

修复后的代码

#include <vector>
#include <iostream>

using namespace std;

void convertToBinary(short decimalNumber, vector<short> &binaryNumber)
{
    short divisor = 128;
    // 固定循环8次,生成完整的8位二进制数(对应小于256的十进制数)
    for (int i = 0; i < 8; ++i) {
        if (decimalNumber >= divisor) {
            binaryNumber.push_back(1);
            decimalNumber -= divisor;
        } else {
            binaryNumber.push_back(0);
        }
        divisor /= 2;
    }
}

int main() {
    short decimalNumber = 231;
    vector<short> binaryNumber;
    convertToBinary(decimalNumber, binaryNumber);
    for (int bit : binaryNumber) {
        cout << bit;
    }
    // 输出应为:11100111
    return 0;
}

修复说明

  1. 改用for循环遍历8次:确保生成完整的8位二进制结果,不会因为decimalNumber提前变为0而停止。
  2. 直接通过>=判断位值:避免除法操作,确保每一位只能是0或1,同时正确处理等于divisor的情况。
  3. 移除错误的除法位值计算:通过条件判断直接生成0/1,逻辑更清晰且安全。

内容的提问来源于stack exchange,提问作者Halty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:20:46