Java 从二进制到十进制最高有效位(MSB)的数字转换,导致不期望的结果

Java 从二进制到十进制最高有效位(MSB)的数字转换,导致不期望的结果,java,recursion,Java,Recursion,在main方法中,当我试图将二进制数作为整数传递时,当1给出所需结果时,最有效的位。但当我将其更改为0时,它会给出意外的结果。 作为补救措施,我必须将字符串转换为整数,然后传递它 public class BinaryToDecimal { static int BinaryNum(int n, int p){ if(n==0){ return 0; } else{ return (int)

在main方法中,当我试图将二进制数作为整数传递时,当1给出所需结果时,最有效的位。但当我将其更改为0时,它会给出意外的结果。 作为补救措施,我必须将字符串转换为整数,然后传递它

public class BinaryToDecimal {


   static int BinaryNum(int n, int p){
        if(n==0){
            return 0;
        }
        else{
            return (int)((n%10)*(Math.pow(2, p))+BinaryNum(n/10,p+1));
        }
    }
    public static void main(String[] args) {
        System.out.println(BinaryNum(Integer.parseInt("001010"), 0));
    }

}

为什么不使用内置方法:


2是这里数字的基数,表示它是一个二进制基数-2。它将自动将001010二进制数转换为10位十进制值。

为什么不使用内置方法:


2是这里数字的基数,表示它是一个二进制基数-2。它将自动将001010二进制数转换为10位十进制值。

如果您真的想自己递归地执行此操作,您可以这样做

static int BinaryNum(String n, int p) {
    if (n.length() == 1) {
        return (int) (Integer.parseInt(n) * Math.pow(2, p));
    } else {
        return (int) ((n.charAt(n.length() - 1) - 48) * Math.pow(2, p)) + BinaryNum(n.substring(0, n.length() - 1), p + 1);
    }
}

  public static void main(String[] args) {
        System.out.println(BinaryNum("101010", 0));
    }

如果你真的想自己递归地做这件事,你可以这样做

static int BinaryNum(String n, int p) {
    if (n.length() == 1) {
        return (int) (Integer.parseInt(n) * Math.pow(2, p));
    } else {
        return (int) ((n.charAt(n.length() - 1) - 48) * Math.pow(2, p)) + BinaryNum(n.substring(0, n.length() - 1), p + 1);
    }
}

  public static void main(String[] args) {
        System.out.println(BinaryNum("101010", 0));
    }

嗯,我想稍微改变一下你的二进制数会改变结果,所以我恐怕不明白这个问题。您能提供一些特定输入的示例以及预期和实际结果吗?您不能将二进制返回值用于十进制表示。充其量,您的函数将返回与输入相同的值。你需要一个可以控制的不同基数的返回类型,比如String,或者BigDecimal。好吧,我想改变一点二进制数会改变结果,所以我恐怕不理解这个问题。您能提供一些特定输入的示例以及预期和实际结果吗?您不能将二进制返回值用于十进制表示。充其量,您的函数将返回与输入相同的值。您需要一个具有不同基数的返回类型,例如String,或者BigDecimal。