3

saturnと呼ばれる非常に特殊な(そして最近では役に立たない)プロセッサを検討しています。

この CPU の奇妙な特徴の 1 つは、その要素単位がバイト (8 ビット) ではなく、ニブル (4 ビット) であることです。見た目だけではなく、ポインター値はニブルで表現されます。

Saturn 用の C コンパイラを作成する試みが 1 回ありました: hp48xgcc

そのドキュメントを見て、その基本的な型が char 8 ビットの通常の GCC 規則に従っていることに気付きました。この時点で、要素単位のサイズを提供することが CHAR_BIT の意図ではないのだろうかと疑問に思いました。これは、 GCC 独自のドキュメントで示唆されているようです。

You can compute the number of bits in any data type like this:
      sizeof (type) * CHAR_BIT

この場合、Saturn アーキテクチャを考慮すると、CHAR_BIT = 4 にする方がよいでしょう。

または、 CHAR_BIT の意味を誤解していますか?

4

2 に答える 2

11

いいえ。C99 標準CHAR_BIT によると、最小値は 8 です(ところで、これは C89/90 にも当てはまります)。

C99 ドラフト標準 (WG14/N1256) の関連セクションは次のとおりです。

5.2.4.2.1 整数型のサイズ

以下に示す値は、#if 前処理ディレクティブでの使用に適した定数式に置き換えられます。さらに、CHAR_BIT と MB_LEN_MAX を除いて、以下は整数昇格に従って変換された対応する型のオブジェクトである式と同じ型を持つ式に置き換えられます。それらの実装定義の値は、同じ符号で示されているものと同じかそれ以上の大きさ (絶対値) でなければなりません。

— ビットフィールド (バイト) ではない最小オブジェクトのビット数

CHAR_BIT 8

于 2013-08-30T16:44:14.023 に答える
5

いいえ。CHAR_BIT は、C89 標準以降をサポートするすべてのコンパイラで少なくとも 8 ビットであることが保証されています。

于 2013-08-30T16:43:03.997 に答える