Как действуют восьмеричные и шестнадцатеричные основания в Java?

Может ли кто-нибудь мне объяснить, как именно действуют восьмеричные и шестнадцатеричные основания? Приведу пример. Ввожу int x = 077; (восьмеричное основание). Нажав на команду run, получаем результат 63. Вопрос — как и что происходит, чтобы 077 превратилось в 63 после компиляции? Если надо, вот ещё один пример. int y = 0x1000 (шестнадцатеричное основание) После компиляции результат равен 4096. Java я начал изучать не так давно, поэтому, прошу прощения, если вопрос вам покажется абсурдным или глупым.


Ответы (2 шт):

Автор решения: Roman Konoval

Если в двух программах единственное различие в исходном тексте в строках:

int x = 077;

и

int x = 63;

то в скомпилированном виде они будут абсолютно идентичны.

Работает это так. Компилятор во время компиляции, когда встречает целочисленную константу , которая начинается с нуля, то интерпретирует ее как восьмеричное число. Если упростить, то компилятор константу сразу преобразует в 63.

→ Ссылка
Автор решения: Aziz Umarov

Не мучайте себя такими вопросами. Абсолютно все хранится в двоичной системе. А что означает та или иная последовательность это мы вносим в это смысл. К примеру 00111111 может означать и 077 и 63 и вообще что угодно. Для вас важно понять что есть хранение и есть представление его. Так вот 077 и 63 и даже '?' это представление последовательности битов 00111111

→ Ссылка