Преобразование числа из двоичного в десятичное Старшие значащие биты (MSB), вызывающие нежелательный результат - PullRequest
1 голос
/ 14 октября 2019

В основном методе, когда я пытаюсь передать двоичное число как Integer самый старший бит, когда 1 дает желаемый результат. Но когда я изменяю его на 0, это дает неожиданные результаты. Как средство, я должен преобразовать string в integer и затем передать его.

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 голосов
/ 14 октября 2019

Почему бы вам не использовать встроенный Integer # parseInt (s, radix) метод:

Integer.parseInt("001010", 2)

2 - основание (основание) для числаздесь говорится, что это двоичное число (base-2). Он автоматически преобразует двоичное число 001010 в десятичное значение 10.

0 голосов
/ 14 октября 2019

Если вы действительно хотите сделать это рекурсивно самостоятельно, вы можете сделать это следующим образом.

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