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

十进制转二进制Java程序异常:输入1024及更大值返回错误结果

问题分析与修复方案

嘿,这个问题很典型——你用int类型来存储二进制结果,这会触发整数溢出,这就是为什么1024及更大的数会返回错误值。

为什么小于1024没问题?

1023的二进制是1111111111(10个连续的1),当你把它当作十进制整数存在int里时,值是1111111111(约11亿),而Java中int的最大值是2147483647(约21亿),所以这个数还在int的有效范围内,不会出问题。

为什么1024就崩了?

1024的二进制是10000000000(1后面跟10个0),对应的十进制整数是10000000000(100亿),这远远超过了int的最大值。当int的数值超出范围时,会发生溢出回绕(按照补码规则循环到负数区间),最终得到的就是你看到的那个奇怪的数值1410065408。

靠谱的修复方案:用String存储二进制结果

既然数值类型有范围限制,最稳妥的办法是用String来拼接二进制位,这样不管输入多大的数(只要在int的输入范围内),都能正确得到二进制字符串。修改后的代码如下:

public static String returnBinary(int number) {
    // 特殊处理输入为0的情况,避免返回空字符串
    if (number == 0) {
        return "0";
    }
    StringBuilder binaryBuilder = new StringBuilder();
    while (number > 0) {
        // 取当前最低位的二进制值
        int currentBit = number % 2;
        // 拼接到字符串中(此时是从低位到高位)
        binaryBuilder.append(currentBit);
        // 右移一位,相当于除以2
        number = number / 2;
    }
    // 反转字符串,得到正确的高位到低位顺序
    return binaryBuilder.reverse().toString();
}

补充说明

如果非要用数值类型,你可以换成long,但long也有上限(最大能存63位二进制数),超过后还是会溢出。所以用String是最通用、最不会踩坑的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:36:43