C++ での 128 ビット整数の使用
このチュートリアルでは、C++ の 128 ビット整数について説明します。 なぜそれが必要なのか、C++ で可能な代替手段についても説明します。
C++ での 128 ビット整数の使用
C++ で整数を処理するには、複数の選択肢があります。 int
データ型から始まり、64 ビットの long
、long int
、および long long int
まで、格納できる正の最大数は 9223372036854775807
(16 進数の 7FFFFFFFFFFFFFF
) です。
7
を 16 進数で考えてみましょう。 次に、符号ビットがオンであることを意味するバイナリ 1000
を持つ 8
があります。 最後に、-1
から -9223372036854775808
までの負の整数があります.9223372036854775807
は、多くのストレージと算術演算の要件を処理するのに十分な大きさです。
C++ における 128 ビット整数とその代替の重要性
さらに大きな整数が必要な場合、問題は、これらの整数に対して算術演算を実行するかどうかです。 答えがはい
の場合、おそらく 128 ビットよりも多くのストレージが必要になる可能性があります。
2つの大きな整数の加算または乗算の結果には、さらに多くのビットが必要になる場合があります。 したがって、この場合、big integers を実装すると役立つ場合があります。
最後に、ストレージのみに 128 ビット整数が必要な場合、1つの解決策は 2つの 64 ビット整数の構造体を作成することです。または、8
要素の int
配列または の
char 配列を使用することもできます。 16
要素。
ただし、GCC は int128_t
という 128 ビット整数用の特定のデータ型を提供します。 サポートされているコンパイラでは、サイズを確認できます。
int128_t var;
cout << sizeof(var) << '\n';
出力は 16
となり、これは 16x8=128 ビット
を意味します。
ただし、128 ビットを保持できる特定のプロセッサではサポートされています。 それ以外の場合、大きな整数を格納しようとすると、コンパイラは次の警告のいずれかを生成します。
warning: overflow in implicit constant conversion
warning: integer constant is too large for its type
議論の結論は、最悪の場合に必要なビット数を正確に決定することです。
さらに、データのみを保存しますか、それとも算術演算を実行しますか? 次に、算術演算を実行する場合は、Big Integer の実装がソリューションです。
Big Integer 実装の場合、500 ビットや 5000 ビットでも気にする必要はありません。
ストレージのみを実行する場合は、他のソリューションを利用できます。 2つの 64 ビット データ メンバーの構造体を使用するか、int
データ型または char
データ型の配列を使用します。