ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
ISO/IEC 9899:1999(いわゆるC99、日本語規格はJIS X 3010:2003)で採用された、Cの変数型の一つ。long intよりも更にlongな整数を宣言する。
C++ではISO/IEC 14882:2011(C++11)で仕様化されたが、それ以前から一部の実装(GCCやMicrosoft C++など)で対応していた。
概ね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と比較すると若干効率の悪いコードを出力しているようである。
数値の型を表わすサフィックスは、次のものが使われる。
printfのフォーマット文字列は、標準的には%lldなどを用いる。
但し、Microsoft Visual C++ 2003等では、%lld等では値を正常に表示できない。代わりに次のようにする。
long long intは、標準ではsignedである。
unsigned long longとして使用すると、符号無しの変数となる。
対応する実装では、limits.hにおいて以下の3個のマクロ定数が定義される。これを利用すると、その環境での長さを得ることができる。
Visual Studio 6.0(Microsoft Visual C++ 6.0)の時代だと、独自の__int64には対応するがlong longは未対応だった。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます