私が持っている問題は、一種の大きな整数ライブラリを作成することです。私はそれをクロスプラットフォームとできるだけ速くしたいと思っています。これは、システム上でネイティブにサポートされているような大きなデータ型で数学を実行しようとする必要があることを意味します。現在のプラットフォームで最大のネイティブ整数型を見つけよう
実際に私が32ビットまたは64ビットシステム用にコンパイルしているかどうかを知りたくありません。私が必要とするのは、64ビットまたは32ビットのビット整数を作成する方法です。私はsizeofを使って、それが何であるかによって異なった振る舞いをするでしょう。
使用はsizeof(void *型):ここで
は、いくつかの可能な解決策とその問題となっている これは、メモリへのポインタのサイズを与えます。システムのメモリへのポインタが、それよりも大きいか、またはその逆の可能性があります(そうはないかもしれません)。 常にいくつかのプラットフォームで長い整数はアーキテクチャによって異なりますが(私のシステムはこのような例の1つです)、いくつかのコンパイラは64ビットでも4バイトの長整数を実装します。
常にlong longを使用してください: 多くの32ビットシステムでは、これは効率的ではない可能性がありますが(おそらく、私が書き込んでいるコードよりも効率的ですが)、64ビット整数です。この問題の本当の問題は、一部のアーキテクチャ(例えば、自分のmp3プレーヤーに電力を供給しているものなど)ではまったくサポートされていない可能性があるということです。
強調すると、私のコードは一度選択された整数の実際のサイズが気にしません(sizeof()が問題となるものなら何でも)に依存します。私は、コードを最も効率的にする整数型を選択したいだけです。
私の頭に浮かぶのは、何らかの形でCPUのレジスタのサイズを調べることです。 – BlackBear
既存のbignumライブラリで答えを探しましたか? http://sourceforge.net/projects/bignlibacbignum/ – mth
おそらく何かを移動して何かを追加し、オーバーフローフラグを確認してください – BlackBear