字节中的位数是否等于char类型中的位数?
C标准是否要求它? 是否有一个平台,其中一个字节中的位数不等于char
类型中的位数?
是。 两者都等于CHAR_BIT
* 。
C标准将CHAR_BIT
定义为: “不是位字段(字节)的最小对象的位数” 。 c99明确说: “一个字节包含CHAR_BIT
位。”
“ UCHAR_MAX
应等于2 CHAR_BIT
– 1” – 这意味着unsigned char
至少需要CHAR_BIT
位( char_bits >= CHAR_BIT
)。
sizeof(char) == 1
(单字节字符适合一个字节),即char
类型最多需要CHAR_BIT
位( char_bits <= CHAR_BIT
)。
从char_bits >= CHAR_BIT
和char_bits <= CHAR_BIT
跟随char_bits == CHAR_BIT
(无填充位)。
POSIX明确地说 : “ CHAR_BIT
类型char
的位数。”
* :如果char
已签名且CHAR_BIT > 8
(没有下面的$6.2.6.2
引用),则不清楚SCHAR_MIN..SCHAR_MAX
范围是否涵盖所有CHAR_BIT
位。 尽管名称CHAR_BIT
清楚地传达了意图(“ char
的位数”)。
c11说(n1570草案中$6.2.6.2
): “ signed char
不应有任何填充位。只有一个符号位。”
从$6.2.5.15
:
实现应将
char
定义为具有与signed char
或unsigned char
相同的范围,表示和行为
它遵循:所有CHAR_BIT
位用于表示CHAR_MIN..CHAR_MAX
范围(因为有signed
和unsigned char
类型都使用所有位)。
为了比较,不像char
; _Bool
可以使用更少的比特$6.7.2.1.4(122)
:
虽然
_Bool
对象中的位数至少为CHAR_BIT
,但_Bool
的宽度(符号和值位数)可能只有1位 。