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

C语言二进制转十进制转换器出现逻辑错误 输出随机数

问题原因
  • 访问未初始化的数组垃圾值:代码中数组b从索引i=1开始存储输入的二进制位,但计算循环的终止条件为i>=0,当i=0时会读取从未赋值的b[0],该位置是栈内存的随机残留值,直接引入随机计算误差。仅当全1输入时刚好b[0]残留值为0,才会巧合得到正确结果。
  • 位权与二进制位的对应关系颠倒:输入二进制时第一个读取的是最高位,但代码将其存入索引更小的数组位置,计算时给索引更小的位置匹配了更小的2的幂次,导致高位被赋予低位权重,计算逻辑本身就存在错误。
  • pow函数存在精度风险:pow是浮点数计算库函数,计算2的整数次幂时可能出现精度误差,比如pow(2,10)可能返回999.9999999,强转为int时会被截断为999而非正确的1024。
修复方案

无需额外数组存储二进制位,直接边读取边计算:每读取一位二进制数,就将当前十进制结果乘2(等价于二进制左移一位),再加上当前读取的位值,逻辑简单且完全规避上述问题。

修复后完整代码
#include <stdio.h>

int main() {
    int decimal = 0;
    char ch;
    printf("enter binary\n");
    ch = getchar();
    while(ch != '\n') {
        decimal = decimal * 2 + (ch - '0');
        ch = getchar();
    }
    printf("%d", decimal);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:02