long long

読み:ロング・ロング
外語:long long 英語
品詞:名詞

ISO/IEC 9899:1999(いわゆるC99、日本語規格はJIS X 3010:2003)で採用された、Cの変数型の一つ。long intよりも更にlongな整数を宣言する。

C++ではISO/IEC 14882:2011(C++11)で仕様化されたが、それ以前から一部の実装(GCCやMicrosoft C++など)で対応していた。

目次

正式にはlong long intと書いて長い長いintを表わす。但しlongの後のintは省略可能であり、long longとだけ記述した場合はlong long intであるとして処理される。

GCCでは、符号付きで、概ね64ビット以上の処理系依存のサイズを持つ。

但し、言語仕様上はビット長は保証されておらず、次のように扱われる。

charshortintlonglong long

一般的な実装では、データ型モデルに応じて、次の長さとなることが多い。

  • 16ビット環境 = 存在しない
  • 32ビット環境
    • ILP32 = 64ビット長 (多くの32ビット環境)
    • LP32 = 64ビット長
  • 64ビット環境
    • LLP64 = 64ビット長 (Win64)
    • LP64 = 64ビット長 (多くの64ビットLinuxやBSD)
    • ILP64 = 64ビット長

Microsoft C/C++では厳密に長さを保証した__int64という変数型を用意している。

32ビット環境でも利用可

概ね64ビット長の変数であるが、32ビット環境でもコンパイラーが対応しているなら使用できる。

64ビット環境ならレジスター1本で済むが32ビットではそうはいかないので、メモリーを介した演算として内部で処理されている。従って、演算の手間が多いことから処理速度は遅いと考えられる。

実際に、long longに対応したGCCでの32ビット環境での出力を例に挙げる。

long long num;

num = 0x1122334455667788ll;

上の、long long変数への代入は、下のように出力される。

movl $1432778632, -16(%ebp)

movl $287454020, -12(%ebp)

次に、この変数のインクリメントを例とする。

num++;

上の、インクリメントは、下のように出力される。

addl $1, -16(%ebp)

adcl $0, -12(%ebp)

このように、内部では32ビット×2で処理されていることが分かる。

なお、clang/LLVMやVisual C++でも同様であるが、GCCと比較すると若干効率の悪いコードを出力しているようである。

サフィックス

数値の型を表わすサフィックスは、次のものが使われる。

  • ll、LL (signed)
  • ULL、LLU、ull、llu等 (unsigned)

printf

printfのフォーマット文字列は、標準的には%lldなどを用いる。

但し、Microsoft Visual C++ 2003等では、%lld等では値を正常に表示できない。代わりに次のようにする。

  • %I64d、%I64i、%I64o、%I64x、%I64X (signed)
  • %I64o、%I64u、%I64x、%I64X (unsigned)

符号

long long intは、標準ではsignedである。

unsigned long longとして使用すると、符号無しの変数となる。

マクロ定数

対応する実装では、limits.hにおいて以下の3個のマクロ定数が定義される。これを利用すると、その環境での長さを得ることができる。

LLONG_MIN
long long型の最小値 (例えば0x8000000000000000)
LLONG_MAX
long long型の最大値 (例えば0x7fffffffffffffff)
ULLONG_MAX
unsigned long long型の最大値 (例えば0xffffffffffffffff)

関連

Visual Studio 6.0(Microsoft Visual C++ 6.0)の時代だと、独自の__int64には対応するがlong longは未対応だった。

用語の所属
整数型
関連する用語
__int64
long

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club