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).