Язык C: неявное преобразование из int в char изменяет значение с 12592 на 48 - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть массив символов в C

char value_numbers [] = {'2', '3', '4', '5', '6', '7', '8', '9', '10'};

, но я получаю следующие сообщения об ошибках в XCode

Implicit conversion from 'int' to 'char' changes value from 12592 to 48
Multi-character character constant

Кто-нибудь знает, что это значит?

1 Ответ

0 голосов
/ 17 декабря 2018

12592 - это 0x3130.Это говорит о том, что ваш компилятор C представляет символы с ASCII и задает значения многосимвольных констант символов простым способом, как если бы каждый символ был цифрой в числе от 256 до 256.

Для инициализации элементаvalue_numbers с этим значением, компилятор должен преобразовать 12592 в char.Если char не подписано, это эффективно выполняется путем взятия только младших восьми битов, которые равны 0x30 или 48, кода для '0'.(Математически, остаток по модулю 256 берется.) Если char подписано, стандарт C требует, чтобы реализация C определяла результат преобразования значения (который может включать в себя сигнализацию об исключении вместо создания значения и продолжения).Обтекание по модулю 256 представимым значением является обычным явлением.

Поскольку ваш исходный код '10' представляет значение 12592, но компилятор был вынужден сохранить другое значение в массиве, он предупреждает вас.

Обратите внимание, что фактическая кодировка символов зависит от реализации (0 - 48 в ASCII, но не в EBCDIC).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...