2013-07-22 4 views
1

Это может быть глупый вопрос.Зачем нам вообще (HEX | OCT) методы _to_DEC?

Когда я пытался создать некоторые методы, например, «восьмеричный до десятичного эффективно», мне напомнили, что есть литералы, чтобы выполнить эту работу. Это будет самый быстрый, побитовый, встроенный в систему.

Для восьмеричного префикса с '0'.

Для шестнадцатеричного префикса с '0x'.

исх: https://en.wikibooks.org/wiki/Java_Programming/Literals

for (int i=10; i<18; i++) 
    System.out.println("Octal: " + (0 prefix i)); 

Конечно я знаю слово prefix не работает. Конечно, я знаю, что для литералов. Но если мы можем на самом деле prefix, и пусть система сделает собственное преобразование. Разве это не должно быть наиболее эффективным?

А также, почему нельзя? (Литералы - это литералы, как говорит JLS, недопустимые ответы.)

ответ

4

Поскольку литералы оцениваются во время компиляции. Вы хотите оценить время выполнения.

В Java, вы всегда можете использовать метод toString для отображения значения в любой другой системе счисления, чем 10. В вашем случае:

for (int i=10; i<18; i++) 
    System.out.println("Octal: " + Integer.toString(i, 8)); 

Выход: 12, 13, ....

Или, если вы хотите перебрать восьмеричные числа, просто положить их туда:

for (int i=010; i<018; i++) 
    System.out.println("Octal: " + Integer.toString(i, 8)); 

Выход: 10, 11, ....

+0

Хороший ответ. Так что это может быть не очень эффективно? Можем ли мы знать, как система это делает? – midnite

+0

Компилятор будет читать значения «0» и «0x» с префиксом и нормированные значения в байт-коде. Здесь нет эффективности, это литералы. –

+0

То, что 'Integer.toString()' или 'String.format()' являются десятичными для другого radix. Как насчет (hex | oct) до десятичного? – midnite

0

Литералы облегчают вам запись десятичных, шестнадцатеричных, восьмеричных и т. Д. В исходный код. Они все еще преобразуются в примитивы при компиляции.

Для преобразования вам понадобится такая служебная программа, как String.format().