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

Java实现二进制转十进制算法运行结果异常问题求助

问题根因
  • 代码的核心错误是conversion *= 2的权重更新逻辑放在了if判断分支内部:只有遍历到的二进制位为1时才会更新权重,遇到0位时权重不会进位,直接导致后续高位的权重计算完全错误,和跨平台运行无关,是代码本身的逻辑缺陷。

我们可以直接复现你输入10110时的错误计算过程:

二进制10110从低位到高位依次为0、1、1、0、1
第1位(最低位)为0:不进入if分支,result=0,conversion保持初始值1
第2位为1:result +=1 → result=1,conversion *=2 → 更新为2
第3位为1:result +=2 → result=3,conversion *=2 → 更新为4
第4位为0:不进入if分支,conversion保持为4
第5位(最高位)为1:result +=4 → result=7,conversion *=2 → 更新为8
最终输出7,和你反馈的错误结果完全一致。

修复方案

将conversion *= 2逻辑移到if判断外部,每遍历一位不管当前位是0还是1,权重都统一翻一倍即可,修正后代码如下:

public class Main {
    
    public static int convertToDecimal(String binary) {
        int conversion = 1; 
        int result = 0;
        for(int i = 1; i <= binary.length(); i++) {
            if (binary.charAt(binary.length() - i) == '1') {
                result += conversion;
            }
            conversion *= 2;
        }
        System.out.println(result);
        return result;
    }
    
    public static void main(String[] args) {
        convertToDecimal("10110");
    }
}

运行修正后的代码会输出正确结果22,所有平台运行结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:57:03