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

为何C语言十进制转二进制代码中b变为1410065408而非100000000000?

问题分析与解决

问题根源

  • 函数binnar的返回类型是int,但内部变量b是long long类型。当b的值达到100000000000时,该数值远超出32位int的最大取值范围(通常为2147483647),返回时触发整数溢出,导致值被截断为1410065408。
  • void main并非标准C的合法写法,规范写法应为int main()并返回状态码。

修复后的代码

#include<stdio.h>

// 将函数返回类型改为long long,匹配内部变量类型
long long binnar(int a){
    long long int b = 0, x = 1;
    while(a != 0){
        b += (a % 2) * x;
        x *= 10;
        a = a/2;
    }
    return b;
}

// 标准main函数实现
int main(){
    int a = 1024;
    printf("%lld", binnar(a));
    return 0;
}

额外提示

这种通过构造十进制数来模拟二进制的方式存在局限性:当输入值对应的二进制位数过多时,即使long long也会出现溢出(比如超过18位左右)。更可靠的二进制转换方案是使用字符串存储结果,或者直接逐位输出二进制位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:40:33