これは非常に基本的なことです。
long long 型を定義している間、式は次のようになります。
long long x=5435666LL;
ポストフィックスがなくてもコンパイラが適切なメモリ空間(vc ++で8バイト)を割り当てることは非常に明確であるため、ポストフィックスがない場合でもLLがポストフィックスされる理由を理解できません。
では、'LL' 後置はどのような目的で使用されるのでしょうか?
これは非常に基本的なことです。
long long 型を定義している間、式は次のようになります。
long long x=5435666LL;
ポストフィックスがなくてもコンパイラが適切なメモリ空間(vc ++で8バイト)を割り当てることは非常に明確であるため、ポストフィックスがない場合でもLLがポストフィックスされる理由を理解できません。
では、'LL' 後置はどのような目的で使用されるのでしょうか?
あなたのコードはと同等です
long long x;
x = 5435666LL
LL
接尾辞がない場合5435666
は、int
. どちらの場合でも、16 ビット プラットフォームを使用していない限り、 に5435666
適合するため、結果は同じです。int
接尾辞がない場合、コンパイラは、値が収まる最初int
のlong int
とを選択します。long long int
ただし、 に適合する値を特定int
のlong long int
型にする必要がある場合があります。そのためには、LL
接尾辞を使用します。
考案された例:
template <typename T>
void foo(T x) {
static_assert(std::is_same<T, long long>::value, "Must be long long!");
}
int main()
{
foo(0); // Error because 0 without a suffix is an int
foo(0LL);
}
これらのリテラルのサイズが異なることを示すために (実装で と のサイズが異なると仮定int
して)、次の例を検討してください。long long int
#include <iostream>
int main()
{
std::cout << sizeof(0) << ' ' << sizeof(0LL) << std::endl;
}
私にとって、これは次の出力を出します:
4 8
あなたの例では、美容目的のみを持っています。
リテラルが であると想定されているため、違いが生じる可能性がある次の例を考えることができますint
。
enum {
Flag1 = 1 << 0,
Flag2 = 1 << 33,
Flag3 = 1LL << 33;
}