У "а" и "0" всегда есть положительные значения, даже если char подписан?
В зависимости от настроек среды и компилятора тип char
может быть подписан или неподписанным по умолчанию, что означает, что диапазон значений для одиночных символьных констант в 8-разрядных системах дополнений может быть либо -128..127
, либо 0..255
.
В вездесущем наборе символов ASCII его расширения ISO-8859-X или кодировка UTF-8, буквы верхнего и нижнего регистра, а также цифры имеют значения ниже 127.
Но это не так с набором символов EBCDIC:
'A'
равен 0xC1, 'A'
равен 0x81, а '1'
равен 0xF1.
Поскольку это значение выше 127, означает ли это, что тип char
должен быть неподписанным в 8-битных системах EBCDIC? Или могут 'A'
, 'A'
и '1'
иметь отрицательные значения?
Как насчет других наборов символов? Может ли буквы или цифры когда-либо иметь отрицательные значения?
Ответы
Ответ 1
C99 утверждает, что:
6.2.5 Типы
Объект, объявленный как тип char, достаточно велик для хранения любого члена базового набора символов выполнения.
Если член набора символов основного исполнения хранится в char, его значение гарантировано неотрицательно.
Таким образом, если рассматриваемая машина использует кодировку EBCDIC и 8-бит char
, тогда компилятор, совместимый с C99, предназначенный для этой машины, должен иметь без знака char
.