字节中的位数是否等于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_BITchar_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 charunsigned char相同的范围,表示和行为

它遵循:所有CHAR_BIT位用于表示CHAR_MIN..CHAR_MAX范围(因为有signedunsigned char类型都使用所有位)。

为了比较,不像char ; _Bool可以使用更少的比特$6.7.2.1.4(122)

虽然_Bool对象中的位数至少为CHAR_BIT ,但_Bool的宽度(符号和值位数)可能只有1位