Почему 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
имеют тенденцию к недействительности.