1

C の整数は、ハードウェア仕様またはソフトウェアで処理されると見なされますか?

整数によって、プリミティブな「int」を参照しています

C の整数がハードウェアに依存しない場合、gcc に異なる整数ハンドラーを実装させることは標準に違反するという根本的な考えがあります。このようにして、従来の 32 ビット int ハンドラーを持つことができ、さらに 256 ビット整数、あるいは動的サイズの int のハンドラーを持つこともできます。

long と long long については知っていますが、それらが提供されているハードウェアに依存しているかどうかはわかりません。ツールチェーンを構築するときに使用する「int」ハンドラーのサイズ/タイプを指定したいと思います。

これを行うことの危険性も理解しています (32 ビット整数コンパイラで 256 ビット整数をビルドするのは良くないからです!) が、gmp ライブラリのようなものを必要とするコードのビットについては、コードの可読性が大幅に向上すると思います。 . 互換性は同じですが、コード自体ではなくコンパイラに依存します。

クレイジーなアイデアですが、元の質問に戻ります。

C の整数は、ハードウェア仕様またはソフトウェアで処理されると見なされますか?

4

3 に答える 3

5

基準は言う

「プレーンな」オブジェクトには、実行環境のアーキテクチャによって提案される自然なサイズがあります (ヘッダーで定義されているから までintの範囲の任意の値を含むのに十分な大きさです)。INT_MININT_MAX<limits.h>

<limits.h>また、制約の記述はINT_MIN最大で -32767INT_MAXで、少なくとも 32767 です。したがって、ハードウェアに 12 ビットのワードがある場合、int.

于 2009-07-26T13:18:00.280 に答える
2

はい、intはネイティブサイズで扱う予定です。そのsizeof(int)ため、コンパイルして実行するシステムに応じて、異なる値が得られる場合があります。のすべての計算はint、CPU のネイティブ命令によって処理されます。ソフトウェアで行うよりもはるかに高速です。int256 が必要な場合は、自分で記述する必要があります。そして、そこには任意のサイズの整数ライブラリがあると確信しています。

于 2009-07-26T13:18:29.717 に答える
1

256 ビットの int を実装した AC 実装は、C 標準に完全に準拠します (ただし、long int と long long int も少なくとも同じ長さにする必要があることに注意してください)。

ただし、そのようなコンパイラによって生成されたコードは、通常、同じプラットフォーム上の他のコンパイラによって生成されたコードとリンク互換性がありません。これが、実際には行われていない理由の 1 つです。

于 2009-07-26T13:25:20.817 に答える