質問

ある機械(コンパイラ) sizeof(char) != 1?

C99標準 という sizeof(char) 標準的なコンプライアンスの実践の書式を遵守して作成すること1?なお、私の部数と被引用数.

更新: しなければならない機械(CPU、できないアドレスバイト(最小限で読み込まれる4バイト整列が4-sのバイトuint32_t), でコンパイラ機能の定義 sizeof(char) 4? sizeof(char) 1、char32ビット (CHAR_BIT マクロ)

Update2: がsizeof結果ではないバイト!このサイズの文字に置き換わります。Charできる2バイト、または(き)7ビット?

Update3: Ok。すべての機械 sizeof(char) == 1.その機械 CHAR_BIT > 8 ?

役に立ちましたか?

解決

そして度々取り上げられている、C99部6.5.3.4:

適用される場合には、オペランドが は、char型unsigned charまたは署名 char、または適格版) その結果、1.

編集:ないご質問ですが、金利からHarbison、チ3rd ed.(事前c99)p.148:

保管ユニットとなっているときは、最 容量を占める 文字;サイズのオブジェクト タイプ char その1.

編集:答えられるご質問を更新し、以下の質問と解答からHarbisonとィは同Ex.4Ch.6):

で許容してC 実施するタイプ char ができ 代表値であることがわか -2,147,483,648を2,147,483,647?その場合、その sizeof(char) 下にその実装?う の最小と最大の範囲 タイプ int?

回答(ibid,p.382):

許される場合は浪費) 実装用の32ビット 表示タイプ char.に関わらず この実装では、価値の sizeof(char) は常に1です。

こない具体的にはアドレスの場合、バイトは8ビット char 4つのバイト(ことは、事実上不可能では、c99の定義は、以下のとおり sizeof(char) = 1 することがありますが、明らかc99標準Harbison、Ntc.

編集:実際(これはおupd2)、c99関 sizeof(char) バイトから部6.5.3.4してもらうことを目的として

のsizeofオペレーターの収穫量のサイズ (バイト単位)、そのオペランド

での引用、バイトは8ビット char どの4つのバイトが不可能なのためのc99バイトと同じ 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** 

—最大値型のオブジェクトを符号なし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に示します。

他のヒント

ありませんが機械 sizeof(char) 4.では常に1バイトになります。そのバイトを含む32ビットがどのCコンパイラでは、バイトです。詳しくはいう点を C++FAQ26.6.このリンクをカバーでも、私はかなりあるC++ったすべてのルールでかなり満足できるパイでした。で説明する必要がありますので comp.lang.c FAQ8.10 キャラクターより8ビット.

Upd2:がsizeof結果ではないバイト !このサイズの文字に置き換わります。Charで 2バイト、または(き)7ビット?

そう、ここはバイトです。しお話しましょう設定することができます。 sizeof(char) 1バイトによるCコンパイラです。俗に言う呼バイト(8ビット)と同じとは限らないか、Cコンパイラを呼び出バイトになります。ビット数のCバイトによって異な機械です。でも保証される少なくとも8.

PDP-10 やPDP-11 しました。

更新: あのようなC99のコンパイラのためのPDP-10.

一部のモデルのアナログデバイスの32ビットSHARC DSPてCHAR_BIT=32、 TiのDSPからTMS32F28xxてCHAR_BIT=16日 と伝えられ.

更新:はありま GCC3.2PDP用-10 とCHAR_BIT=9 (チェックインするようになります。hこのアーカイブ).

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top