有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java转换为十进制算法

我正在研究一种将二进制转换为十进制的算法,我偶然发现了一个奇怪的问题。该算法在每个平台上的工作原理都是一样的,但在另一台计算机上返回的结果不同。它从10110返回7,也就是22。代码:

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");
    }

}

共 (1) 个答案

  1. # 1 楼答案

    conversion变量加倍应该放在if块之外

    for(int i = 1; i <= binary.length(); i++) {
        if (binary.charAt(binary.length() - i) == '1') {
            result += conversion;
        }
        conversion *= 2; // or conversion <<= 1;
    }
    

    最好使用带有Integer.parseInt的内置方法:

    return Integer.parseInt(binary, 2);