Преобразование двоичного числа 011 в десятичное число 3

Я сделал простую программу Java BlueJ, преобразующую двоичный код в десятичный, используя рекурсивную технику, которую мне задает вопрос. Он работает нормально для большинства значений, но есть проблема с 011.

Когда я ввожу 11, он возвращает 3. но когда я ввожу 011 или 0011 или 0000011 или так далее, это дает 9. Я напечатал параметр x сразу после ввода, чтобы проверить, где я ошибся. Он печатал x=9, даже не x=11. Как мне ввести 0011 как 11 (если нужно) ИЛИ как решить эту проблему? Вот код:

public class Binary 

{ 

    long convertDec(long x) {

      long res=0;

      long k=0;

      while(x>0) {

        res+=x%10*(long)Math.pow(2,k++);

        x=x/10;

      }

      return res;

   }

}

На самом деле это часть более крупного вопроса, поэтому я просто представляю необходимую часть. Я учусь в XII классе совета ISC, поэтому, пожалуйста, постарайтесь очень просто объяснить свой ответ. Я использую технику 110=1*2^2+1*2^1+0*2^0.


person soumya_sarkar.19    schedule 27.05.2014    source источник
comment
Было бы лучше использовать формат String для двоичного значения, а не long.   -  person Obicere    schedule 27.05.2014
comment
Нет, вопрос, над которым я работаю, говорит, что я должен использовать long   -  person soumya_sarkar.19    schedule 27.05.2014


Ответы (1)


Взгляните на следующий код:

    int v3 = 0b11;
    System.out.println(v3);

    int va = 11;
    System.out.println(va);

    int vb = 011;
    System.out.println(vb);

Это напечатает
3
11
9

Это потому, что 0b11 означает 3 в двоичном формате. И вы можете использовать 0b00000011; и вы все равно получите 3.

11 is 11.

011 на самом деле является восьмеричным значением. 1*8^1 + 1*8^0 -> 8 + 1 -> 9

person Alexandre Santos    schedule 27.05.2014
comment
Спасибо. Ваш ответ действительно помогает. - person soumya_sarkar.19; 27.05.2014