C中char类型的负值的重要性

Abh*_*hav 6 c character chars

  1. 'C'中的字符用于表示字符.
  2. 代表所有代码页中字符的数字总是正数.

签名字符有什么用?字符中包含的负值仅用作较小的整数数据类型中的整数值而不是int和short?他们没有其他解释吗?(像表示字符的字符中的正值)

Mar*_*ett 11

'C'中的字符用于表示字符.

并非总是如此,字符用于表示字节,它们是c中具有已知大小的唯一类型.

  • 如果你的意思是他们是sizeof(type)保证为1的唯一类型,是的.它们不能保证是8位. (12认同)
  • 但是,C89和C99标准确保char至少为8位.可能更多,可能是签名或未签名. (3认同)
  • @DavidThornley 他们保证是 CHAR_BIT 位,并且 CHAR_BIT 是众所周知的。 (3认同)
  • C告诉char的大小唯一的一点是它是1.它没有说明1的单位是什么. (2认同)
  • 例如,PDP-10 使用 9 位字节。 (2认同)

Chr*_*oph 5

只有基本执行字符集的字符才能保证为非负(C99,6.5.2 §3):

声明为 char 类型的对象足以存储基本执行字符集的任何成员。如果基本执行字符集的成员存储在 char 对象中,则保证其值为非负。如果任何其他字符存储在 char 对象中,则结果值是实现定义的,但应在该类型可以表示的值范围内。

你在“纯”之间进行辨别char的类型和种类signed charunsigned char,以及:signed char并且unsigned char是针对下式成立(C99,6.5.2§5)普通整数类型:

声明为签名字符类型的对象与“普通”字符对象占用的存储量相同。