Cの整数は、ハードウェアの仕様によって処理またはソフトウェアで処理することを想定していますか?
質問
Cの整数は、ハードウェアの仕様によって処理またはソフトウェアで処理することを想定していますか?
整数では、私は原始的な "INT" を参照しています。
基本的な考え方は、Cの整数は、ハードウェアに依存していない場合、gccが異なる整数ハンドラを実装する必要があり、標準の違反だろうということで。この方法で、あなたの伝統的な32ビットのintハンドラを持つことができ、その後、あなたはまた、256ビットの整数、または多分ダイナミックなサイズのint型のハンドラを持っている可能性があります。
私は長いと長い長いについて知っていますが、私はそれらを提供すること、ハードウェアから独立しているかどうかわからないんだけど、私はただのツールチェーンを構築する際に使用する「INT」ハンドラのサイズ/タイプを指定したいのですがます。
(32ビット整数コンパイラでビルドする256ビットの整数を構築することは悪いだろうから!)私もこれを行うことの危険性を理解しますが、GMPライブラリのようなものが必要なコードのそれらのビットのために、私はそれがコードになるだろうと思いますずっと読みやすく。互換性は同じになりますが、依存性は、コンパイラの代わりに、コード自体になります。
クレイジーなアイデア、私が知っている...しかし、元の質問に:
Cの整数は、ハードウェアの仕様によって処理またはソフトウェアで処理することを想定していますか?
解決
標準は言う。
A「普通」
int
オブジェクトは、(ヘッダINT_MIN
に定義されてINT_MAX
する範囲<limits.h>
の任意の値を含むのに十分な大きさ)の実行環境のアーキテクチャによって示唆自然なサイズを有している。
そして<limits.h>
制約の記述は、ハードウェアが12ビットの言葉を持っている場合、あなたはINT_MIN
ための2つの単語を使用する必要があり、少なくとも32767そうすることで、最も-32767とINT_MAX
するint
ます。
他のヒント
はい、int型は本来のサイズで取り扱うことになるだろう。だから、sizeof(int)
はあなたがコンパイルして実行する上でどのようなシステムに応じて、異なる値を与えるかもしれません。ソフトウェアでそれを行うよりもはるかに高速 - int
のためのすべての数学は、CPUのネイティブ命令によって処理されようとしています。あなたがint256が必要な場合は、自分で作成する必要があります。そして、私は、任意のサイズの整数ライブラリがそこにあると確信しています。
Cの実装
しかし、このようなコンパイラによって生成されたコードは、一般的にを考えていないのリンクと互換性のあるそれは実際には行われていない理由の1つです同じプラットフォーム、上の他のコンパイラによって生成されたコードとなります。