在 C99 第 6.5.3.4 节中它始终为 1:
当应用于具有 char、unsigned char 或 signed char 类型(或其限定版本)的操作数时,结果为 1。
编辑:不是您问题的一部分,而是出于Harbison 和 Steele 的兴趣。C:参考手册,第三版,Prentice Hall,1991(pre c99)p。148:
一个存储单元取一个字符占用的存储量;因此类型对象的大小为char
1。
编辑:在回答您更新的问题时,Harbison 和 Steele 的以下问答是相关的(同上,第 6 章的第 4 条):
是否允许有一个 C 实现,其中类型char
可以表示从 -2,147,483,648 到 2,147,483,647 的值?如果是这样,该实施将是什么sizeof(char)
?最小和最大的类型范围是int
多少?
答案(同上,第 382 页):
允许(如果浪费的话)实现使用 32 位来表示 type char
。无论实现如何, 的值
sizeof(char)
始终为 1。
虽然这并没有具体解决字节是 8 位并且是其中 4 个字节的情况(在 c99 定义中实际上是不可能的,见下文),但从 c99 标准以及 Harbison 和 Steele 中始终可以清楚地char
看到这一事实。sizeof(char) = 1
编辑:事实上(这是对您的 upd 2 问题的回应),就 c99 而言,以字节sizeof(char)
为单位,再次来自第 6.5.3.4 节:
sizeof 运算符产生其操作数的大小(以字节为单位)
因此结合上面的引用,8 位字节和char
其中 4 个字节是不可能的:对于 c99,一个字节与 a 相同char
。
回答您提到 7 位的可能性char
:这在 c99 中是不可能的。根据标准第 5.2.4.2.1 节,最小值为 8:
它们的实现定义的值在大小上应等于或大于所示的值,具有相同的符号。
— 不是位域的最小对象的位数(字节)
**CHAR_BIT 8**
— 有符号字符类型对象的最小值
**SCHAR_MIN -127//−(27−1)**
— 有符号字符类型对象的最大值
**SCHAR_MAX +127//27−1**
— unsigned char 类型对象的最大值
**UCHAR_MAX 255//28−1**
— char 类型对象的最小值
**CHAR_MIN** see below
— char 类型对象的最大值
**CHAR_MAX** see below
[...]
如果 char 类型对象的值在表达式中使用时被视为有符号整数,则 CHAR_MIN 的值应与 SCHAR_MIN 的值相同,CHAR_MAX 的值应与 SCHAR_MAX 的值相同。否则,CHAR_MIN 的值应为 0,CHAR_MAX 的值应与 UCHAR_MAX 的值相同。UCHAR_MAX 值应等于 2^CHAR_BIT - 1。