long long是C++11中新引入的内置类型
其实并没有什么特别的,根据C++11的文档long long至少占64位,在大部分的编译器里long long占64位。
在visual studio中各种类型所占字节数如下代码所示,其中显示long long占8字节。同样unsigned long long也占8字节64位。
int main()
{
cout << sizeof(bool) << endl; // 1
cout << sizeof(char) << endl; // 1
cout << sizeof(short) << endl; // 2
cout << sizeof(int) << endl; // 4
cout << sizeof(long) << endl; // 4
cout << sizeof(long long) << endl; // 8
return 0;
}
在编程中经常会遇见一个不小心产生的bug
long long a = 2 * INT_MAX;
变量a为64位的,可以存下2倍的int类型的最大值,预期结果应该是4294967294,但是实际输出的-2,表示在运算过程中产生了溢出。
2和INT_MAX都为int类型,进行乘法的时候将结果存在一个int类型的临时变量中,然后将该临时变量赋值给long long类型的a,即将-2赋值给了a。
在运算时应将其中一个变量定义为long long类型,这样才不会产生溢出。
long long b = 2LL * INT_MAX;
这样可以得到正确结果4294967294