C99 のセクション 6.5.3.4 では常に 1 です。
型 char、unsigned char、または signed char (またはその修飾バージョン) を持つオペランドに適用されると、結果は 1 になります。
編集:あなたの質問の一部ではありませんが、ハービソンとスティールからの関心のために。C: A Reference Manual、Third Edition、Prentice Hall、1991 (pre c99) p. 148:
ストレージ ユニットは、1 文字が占有するストレージの量と見なされます。char
したがって、型のオブジェクトのサイズは1 です。
編集:更新された質問への回答として、Harbison と Steele からの次の質問と回答が関連しています (同上、Ch. 6 の Ex. 4)。
char
型が -2,147,483,648 から 2,147,483,647 までの範囲の値を表すことができるC 実装を持つことは許されますか? もしそうなら、sizeof(char)
その実装の下には何がありますか? type の最小範囲と最大範囲はint
?
回答 (同上、p. 382):
実装で type を表すために 32 ビットを使用することは (無駄であれば) 許可されていますchar
。実装に関係なく、 の値
sizeof(char)
は常に 1 です。
これは、たとえば、バイトが 8 ビットでchar
、そのうちの 4 バイトである場合 (c99 の定義では実際には不可能です。以下を参照) に特に対処していませんsizeof(char) = 1
が、c99 標準および Harbison と Steele から常に明らかな事実です。
編集:実際(これはupd 2の質問への回答です)、c99に関する限り、セクション6.5.3.4からのバイト単位ですsizeof(char)
:
sizeof 演算子は、そのオペランドのサイズ (バイト単位) を生成します
したがって、上記の引用と組み合わせると、8 ビットのバイトでありchar
、そのうちの 4 バイトは不可能です。c99 の場合、1 バイトはchar
.
7ビットの可能性についてのあなたの言及への答えとしてchar
:これはc99では不可能です。標準のセクション 5.2.4.2.1 によると、最小値は 8 です。
それらの実装定義の値は、同じ符号で示されているものと同じかそれ以上の大きさである必要があります[私の強調]。
— ビットフィールド (バイト) ではない最小オブジェクトのビット数
**CHAR_BIT 8**
— signed char 型のオブジェクトの最小値
**SCHAR_MIN -127//−(27−1)**
— signed char 型のオブジェクトの最大値
**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 に等しくなければなりません。