Что такое параметр системы счисления в Java и как он работает?

Я понимаю, что основание для функции Integer.parseInt() является основой для преобразования строки. Разве 11 по основанию 10, преобразованное с основанием/основанием 16, не должно быть B вместо 17?

Следующий код печатает 17 в соответствии с учебником:

public class Test {
  public static void main(String[] args) {
    System.out.println( Integer.parseInt("11", 16) );
  }
}

person Minh Tran    schedule 08.07.2013    source источник
comment
Наоборот. Вы просите его интерпретировать "11" в базе 16. то есть 1*16 + 1.   -  person Oliver Charlesworth    schedule 08.07.2013
comment
благодарю за разъяснение   -  person Minh Tran    schedule 08.07.2013
comment
@MinhTran Пожалуйста, отметьте ответ, который помог вам больше всего.   -  person nanofarad    schedule 08.07.2013


Ответы (6)


Когда вы выполняете операцию ParseInt с основанием, 11 по основанию 16 анализируются как 17, что является простым значением. Затем он печатается по основанию 10.

Вы хотите:

System.out.println(Integer.toString(11, 16));

Это берет десятичное значение 11 (на данный момент не имеет базы, например, имеет «одиннадцать» арбузов (на один больше, чем количество пальцев у человека)) и печатает его с основанием 16, в результате чего получается B.

Когда мы берем значение int, оно сохраняется как основание 2 в физической памяти компьютера (почти во всех случаях), но это не имеет значения, поскольку преобразования синтаксического анализа и преобразования в строку работают с произвольной системой счисления (10 по умолчанию).

person nanofarad    schedule 08.07.2013

На самом деле он берет 11 в шестнадцатеричном формате и преобразует его в десятичный. Так, например, если бы у вас был тот же код, но с "A" в строке, он вывел бы 10.

person tckmn    schedule 08.07.2013

Здесь,

public class Test {
      public static void main(String[] args) {
      System.out.println(Integer.parseInt("11", 16));
    }
}

11 — это число, основанное на 16, и должно быть преобразовано в 10, т. е. в десятичное число.

 So, integer of (11)16 = 1*16^1 +1*16^0 = 16+1 = 17
person Jakir Hosen Khan    schedule 07.12.2014

вы в основном говорите анализировать 11, как если бы это было основание 16, поэтому, если вы знаете, как преобразовать из шестнадцатеричного в десятичное, это будет выглядеть так: 11 в шестнадцатеричном = ((16 ^ 0) * 1) + ((16 ^ 1) * 1 ) = 17 в десятичной системе

если вы хотите преобразовать базу 10 в любую базу, используйте:

Integer.toString(11, 16); //HEXA
output: b
Integer.toString(11, 10); //decimal
output: 11
Integer.toString(11, 8);  //octal
output: 13
Integer.toString(11, 2);  //Binary
output: 1011
person StreamsGit    schedule 01.09.2020

Функция действует в обратном направлении, как вы думаете. Вы конвертируете «11» по основанию 16 в основание 10, поэтому результат равен 17.

person d4vsanchez    schedule 08.07.2013

Чтобы преобразовать базу 10 в базу 16, используйте

System.out.println(Integer.toString(11, 16));

Выход будет б.

person Abhishek K    schedule 25.11.2015