C++ での 128 ビット整数の使用

Abdul Mateen 2023年6月20日
C++ での 128 ビット整数の使用

このチュートリアルでは、C++ の 128 ビット整数について説明します。 なぜそれが必要なのか、C++ で可能な代替手段についても説明します。

C++ での 128 ビット整数の使用

C++ で整数を処理するには、複数の選択肢があります。 int データ型から始まり、64 ビットの longlong 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 データ型の配列を使用します。

関連記事 - C++ Integer