C++ で 64 ビット整数を指定する
 
今日のチュートリアルでは、C++ で 64 ビット整数を指定する方法について説明し、学習します。 さらに、64 ビット整数の使用に問題があった場合の古い方法を比較します。
C++ で 64 ビット整数を指定する
C++ で整数を処理するには、複数の選択肢があります。 int データ型から long int および 64 ビットの long long int まで、次のコードを使用してサイズを確認できます。
#include <iostream>
using namespace std;
int main() {
  long long int v;
  cout << sizeof(v) << '\n';
  return 0;
}
出力は 8 バイトまたは 64 ビットです。 次のコードを使用して、long long int で処理できる最大値を比較してみましょう。
#include <iostream>
using namespace std;
int main() {
  long long int v = 9223372036854775807;
  cout << sizeof(v) << '\n';
  cout << v << '\n';
  return 0;
}
出力は 9223372036854775807 で、これは 8 バイトです。 ただし、vの値を大きくすると、整数定数が大きすぎて符号なしですというエラーが発生します。
9223372036854775807 が正しく処理される正の値の最大範囲であることを意味します。 この数値を 16 進数に変換すると、値は 7FFFFFFFFFFFFFFF になります。
これは、符号ビットを除くすべてのビットが 1 であることを意味します。 同様に、負の整数の最大範囲は -9223372036854775808 です。
したがって、64 ビット整数では問題ないようです。 ただし、過去には、多くのプロセッサが 64 ビット整数を処理できませんでした。 したがって、同じコードが間違った出力を出していました。
たとえば、次の情報を保存しようとしたときにエラー メッセージが表示されました。 コードと関連するエラー メッセージを参照してください。
long long int h2 = 0x4444000044444;
エラーメッセージは次のとおりです。
warning: overflow in implicit constant conversion
warning: integer constant is too large for its type
long long int の他に、stdint.h で利用可能な別の型、int64_t がありました。 繰り返しますが、サイズを確認すると、8 バイトまたは 64 ビットになります。 ただし、結果は同じです。
この議論は、C++ で 64 ビット整数を使用しているときに過去に問題があったと結論付けています。 コンパイラとアーキテクチャに依存していました。 ただし、この問題は現在、新しいコンパイラ バージョンには存在しません。
long long int または int64_t で 64 ビット整数を安全に処理できます。 これらの型は、値を格納するだけでなく、結果が 64 ビット以内である限り、数学演算を実行することもできます。