即使char已签名,’a’和’0’也始终具有正值?

根据环境和编译器设置,默认情况下char类型可以是有符号或无符号的,这意味着8位2s补码系统上单字符常量的值范围可以是-128..1270..255

在无处不在的ASCII字符集中,其ISO-8859-X扩展或UTF-8编码,大写和小写字母以及数字的值低于127。

但是EBCDIC字符集不是这种情况:

'A'是0xC1, 'a'是0x81而'1'是0xF1。

由于这些值大于127,是否意味着char类型必须在8位EBCDIC系统上无符号? 或者'a''A''1'有否定值?

其他字符集怎么样? 字母或数字可以有负值吗?

C99指出 :

6.2.5类型

声明为char类型的对象足够大,可以存储基本执行字符集的任何成员。

如果基本执行字符集的成员存储在char中,则其值保证为非负值。

因此,如果所讨论的机器使用EBCDIC编码和8位char ,那么为此机器设计的C99兼容编译器必须具有未签名的普通char