Предположим, у меня есть код, который выводит $i
как
$i = 016;
echo $i / 2;
//ans will be 7
Я знаю, что ведущий ноль указывает на восьмеричное число в PHP, но как его интерпретировать, как его можно выполнить? Может кто-нибудь поделиться пошаговым исполнением? Какова роль парсера здесь? Я много исследовал и прочитал все предыдущие ответы, но ни у одного нет глубокого объяснения.
Когда вы предшествуете целые числа с нулем в PHP, в этом случае, 029
,
Это становится восьмеричным.
Поэтому, когда вы повторяете это, он преобразуется в десятичную форму.
Что приводит к:
echo 016; //14 (decimal) valid octal
echo 029; // 2 (decimal) - Invalid octal
На самом деле, здесь указано в руководство
Действительный восьмеричный:
octal : 0[0-7]+
Замечания: До PHP 7, если неверное число было задано в восьмеричном целом числе (то есть 8 или 9), оставшаяся часть была проигнорирована. Начиная с PHP 7, возникает ошибка синтаксического анализа.
восьмеричный система счисления, или сокращенно октябрь, является системой счисления base-8 и использует цифры от 0 до 7.
Восьмеричные числа могут быть сделаны из двоичных чисел, группируя последовательные двоичные цифры на группы три (начиная справа).
Например, двоичное представление для десятичного числа 74 равно 1001010. Слева можно добавить два нуля: (00) 1 001 010, соответствующие восьмеричным цифрам 1 1 2, что дает восьмеричное представление 112.
В вашем вопросе $i = 016;
рассчитывается переводчиком и выдает $i = 14;
(которое является эквивалентным десятичным числом)
Затем вы просто делите его на 2, что дает 7.