字节中的位数是否等于char类型中的位数?

时间:2016-03-29 15:51:03

标签: c language-lawyer

C标准是否要求它?是否有一个平台,其中一个字节中的位数不等于char类型中的位数?

1 个答案:

答案 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_BITchar_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 charunsigned char

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

为了进行比较,与char不同; _Bool可能会使用较少的位$6.7.2.1.4(122)

  

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