存储在对象中或由函数返回的值的含义,由用于访问该值的表达式类型(type)决定。(声明为对象的标识符是最简单的此类表达式;其类型在标识符声明中指定。) 类型分为对象类型(objectTypes, 描述对象的类型)和函数类型(functionTypes, 描述函数的类型)。 在翻译单元内的不同位置,对象类型可能处于不完整状态n)(incomplete, 缺乏确定该类型对象大小的充分信息)或完整状态(complete,具备充分信息)。
声明为类型 bool 的对象足够大到能够存储 false 和 true 两个值。
声明为 char 类型的对象具有足够大的容量,可存储基本执行字符集中的任意成员。若将基本执行字符集中的成员存储于 char 对象中, 其值必为非负数。若将其他字符存储于 char 对象中,所得值为实现定义值,但必须处于该类型可表示的值域范围内。
共有五种标准有符号整数类型(standardSignedIntegerType),分别标记为 signed char、short int、int、long int 和long long int。(这些类型及其他类型可通过多种额外方式标记,详见 6.7.3 节。)
位精确有符号整数类型定义为_BitInt(N),其中N为整数常量表达式, 该表达式指定用于表示该类型的位数(包含符号位)。每个N值均对应 一种独立的类型。
还可能存在实现定义的扩展有符号整数类型(extendedSignedIntegerTypes)n)。标准有符号整数类型、位精确有符号整数类型和扩展有符号整数类型统称为有符号整数类型(signedIntegerTypes).n)
声明为signed char类型的对象与"普通"char对象占用相同存储空间。 "普通"int对象具有由执行环境架构决定的自然大小(足以容纳<limits.h>头文件定义的INT_MIN至INT_MAX范围内的任意值)。
对于每种有符号整数类型,都存在一个对应的(corresponding, 但不同的)无符号整数类型 (unsignedIntegerType, 使用关键字 unsigned 标记),该类型占用相同存储空间(包括符号信息) 并具有相同的对齐要求。类型 bool 以及与标准有符号整数类型对应的无符号整数类型即为标准无符号整数类型(standardUnsignedIntegerTypes)。 与扩展有符号整数类型(extendedUnsignedIntegerTypes)对应的无符号整数类型称为扩展无符号整数类型(UnsignedIntegerTypes)。除与位精确有符号整数类型对应的无符号整数类型外,还存在类型 unsigned _BitInt(1),该类型使用一位来表示类型。unsigned _BitInt(1) 与对应位精确有符号整数类型的无符号整数类型统称为位精确无符号整数类型(bit-preciseUnsignedIntegerTypes)。标准无符号整数类型、位精确无符号整数类型及扩展无符号整数类型统称为无符号整数类型(unsignedIntegerTypes)。
标准有符号整数类型和标准无符号整数类型统称为标准整数类型(standardInregerTypes); 位精确有符号整数类型和位精确无符号整数类型统称为位精确整数类型(bit-preciseIntegerTypes); 扩展有符号整数类型和扩展无符号整数类型统称为扩展整数类型(extendedIntegerTypes)。
于任何两个具有相同符号性但整数转换等级不同的整数类型(参见6.3.1.1),整数转换等级较低的类型其值域是另一类型的值域的子集。
有符号整数类型的非负值范围是对应无符号整数类型的子集,且相同值在两种类型中的表示形式一致。n) 无符号类型的可表示值范围为0至2N − 1(含边界值)。 涉及无符号操作数的计算永远不会产生溢出,因为无符号类型的算术运算采用模2N方式进行。