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

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

short a;
a=09;

но не на

a=9;

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


person Tushar    schedule 16.07.2013    source источник
comment
Short имеет длину всего 2 байта, возможно, это вызывает у вас проблему, плюс 09 != 9 AFAIK   -  person Broak    schedule 16.07.2013
comment
Если вы ставите 0 перед числом, это обычно означает восьмеричное представление. Тогда 07 по-прежнему будет означать 7 в десятичном формате, но, например, 010 будет означать 8 в десятичном формате. Поэтому никогда не ставьте нули перед любым числом, чтобы сделать его красивее в коде, на любом языке, чтобы быть уверенным.   -  person nio    schedule 16.07.2013
comment
Вы видели stackoverflow.com/questions/565634/integer-with-leading -нули ?   -  person sandrstar    schedule 16.07.2013


Ответы (2)


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

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

person fcm    schedule 16.07.2013

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

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

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

person Ma3x    schedule 16.07.2013