C标准是否要求它?是否有一个平台,其中一个字节中的位数不等于char
类型中的位数?
答案 0 :(得分:3)
是。两者都等于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 says it explicitly: &#34; CHAR_BIT
类型char
中的位数。&#34;
* :如果char
已签名而CHAR_BIT > 8
已经签署(下面没有$6.2.6.2
引用),则不清楚SCHAR_MIN..SCHAR_MAX
范围是否涵盖所有CHAR_BIT
位。虽然名称CHAR_BIT
清楚地传达了意图(&#34; char
&#34;中的位数。)
c11表示(n1570草案中$6.2.6.2
):&#34; signed char
不得有任何填充位。应该只有一个符号位。&#34;
来自$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位。