Почему 08 не является допустимым целым литералом в Java?

Почему 08 считается вне диапазона int, но 07 и ниже нет?

В Java и некоторых других языках целочисленный литерал, начинающийся с 0 , интерпретируется как восьмеричная (базовая 8) величина.

Для одноразрядных номеров (кроме 08 и 09 , которые не разрешены), результат будет таким же, поэтому вы можете не заметить, что они интерпретируются как восьмеричные. Однако, если вы пишете цифры с более чем одной значащей цифрой, вы можете быть смущены результатом.

Например:

 010 == 8 024 == 20 

Поскольку восьмеричные литералы обычно не то, что вы хотите, вы всегда должны заботиться о том, чтобы никогда не начинать целостный литерал с 0 , если, конечно, вы на самом деле пытаетесь написать нуль сами по себе.

Любое число с префиксом 0 считается восьмеричным. Восьмеричные числа могут использовать только цифры 0-7, так же как десятичное число может использовать 0-9, а двоичный код может использовать 0-1.

 // octal to decimal 01 // 1 02 // 2 07 // 7 010 // 8 020 // 16 // octal to binary (excluding most significant bit) 01 // 1 02 // 10 07 // 111 010 // 1000 020 // 10000 

Есть 10 типов людей, тех, кто понимает троянец, тех, кто этого не делает, и тех, кто думает, что это глупая шутка.

Из спецификации Java :

Октальная цифра состоит из цифры ASCII 0, за которой следует одна или несколько цифр ASCII от 0 до 7 и может представлять собой положительное, нулевое или отрицательное целое число.

Ведущий нуль означает, что значение находится в восьмеричном. 8 не является восьмеричной цифрой, не более 2 действителен в двоичном формате, а G – в шестнадцатеричном формате.

В Java , если вы определяете int с ведущим «0», означает, что вы определяете число в Octal .

int a = 08 выдает ошибку вне диапазона, потому что в восьмеричном номере «8» нет никакого числа. Octal предоставляет только 0-7 номеров.

Если вы определяете a = 07, то это не дает ошибку вне диапазона, потому что цифры «0» и «7» находятся в пределах диапазона Octal.

В большинстве языков программирования, таких как Java и C/C++ , число с начальным нулем интерпретируется как восьмеричное число . Как известно, восьмеричные числа представлены только в пределах от 0 до 7 цифр. Следовательно, числа, такие как 05 , 03 , 054 , действительны, но числа, такие как 078 , 0348 , 09 , 08 имеют тенденцию к недействительности.

Давайте будем гением компьютера.