Cの整数は、ハードウェアの仕様によって処理またはソフトウェアで処理することを想定していますか?

StackOverflow https://stackoverflow.com/questions/1184523

  •  19-09-2019
  •  | 
  •  

質問

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が必要な場合は、自分で作成する必要があります。そして、私は、任意のサイズの整数ライブラリがそこにあると確信しています。

256ビットのint型は、C規格に完全に準拠する(しかし、それはあまりにも長い間、少なくともその長いintとlong long int型を作るために持っていることに注意)です実装ます。

Cの実装

しかし、このようなコンパイラによって生成されたコードは、一般的にを考えていないのリンクと互換性のあるそれは実際には行われていない理由の1つです同じプラットフォーム、上の他のコンパイラによって生成されたコードとなります。

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