Ошибка при задании значений следующим образом

Я получаю сообщение об ошибке в следующих строках "Несоответствие типов: невозможно преобразовать из int в short"

short a;
a=09;

но не на

a=9;

почему это так.

2 ответа

Решение

Использование 0 перед числом означает, что это восьмеричное число. Вы можете использовать его только от 00 до 07, поэтому вы не можете выполнить преобразование (оно также не работает с int, поскольку оно выходит за пределы диапазона, даже если похоже, что оно пытается выполнить неявное приведение).

09 просто число, которое не существует, если говорить вычислительно.

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

Проблема в вашем коде заключается в том, что вы пытаетесь определить целое число (или короткое в вашем случае) в восьмеричной нотации, потому что вы начинаете число с нуля. В восьмеричной нотации цифры могут быть только между 0 и 7. Таким образом, восьмеричное число, написанное как 09, не существует.

Таким образом, обе вещи немного запутали ваш компилятор.

Другие вопросы по тегам