Я получаю сообщение об ошибке в следующих строках "Несоответствие типов: невозможно преобразовать из int в short"
short a;
a=09;
но не на
a=9;
почему это так.
Я получаю сообщение об ошибке в следующих строках "Несоответствие типов: невозможно преобразовать из int в short"
short a;
a=09;
но не на
a=9;
почему это так.
Использование 0 перед числом означает, что оно восьмеричное. Вы можете использовать его только от 00 до 07, поэтому вы не можете выполнить преобразование (оно также не работает с int, так как оно выходит за пределы диапазона, даже если это выглядит так, как будто он пытается сделать неявное приведение ).
09 просто число, которое не существует с вычислительной точки зрения.
Чтобы конкретно ответить на ваш вопрос, это особенность компилятора. Другой компилятор (может быть, просто другая версия) даст вам несколько менее запутанную ошибку, такую как целое число слишком велико: 09 вместо отключения приведения, что в вашем случае даже невозможно, так как номер недействителен.
Проблема в вашем коде заключается в том, что вы пытаетесь определить целое число (или короткое в вашем случае) в восьмеричной записи, потому что вы начинаете число с ведущего 0. В восьмеричной записи цифры могут быть только между 0 и 7. Таким образом, восьмеричное число, записанное как 09, не существует.
Таким образом, обе вещи в сочетании немного запутали ваш компилятор.