1. 定义
C++11标准要求long long类型在不同平台有不同的长度,但至少有64位
,它分为两种:
-
long long
类型:后面需要加上LL
或ll
的后缀。long long num1 = 123456789LL; long long num2 = 123456789ll;
-
unsigned long long
类型:后面加上ull
(不区分大小写)的后缀unsigned long long num1 = 123456789ULL; unsigned long long num2 = 123456789ull; unsigned long long num3 = 123456789uLL; unsigned long long num4 = 123456789Ull;
在C++11中,long long
实际上等价于:
long long int
signed long long
signed long long int
2. 范围
long long大小与平台有关
,查看当前平台long long的大小,和查看其它整形大小一致,通过<climits>
或者<limits.h>
中定义的宏:
-
LLONG_MIN
:最小的long long值。 -
LLONG_MAX
:最大的long long值。 -
ULLONG_MAX
:最大的无符号long long值。
EG:
-
代码:
#include <iostream> #include <climits> using namespace std; int main(void){ long long max = LLONG_MAX; long long min = LLONG_MIN; unsigned long long u_max = ULLONG_MAX; cout << "long long max value = " << max << endl; cout << "long long min value = " << min << endl; cout << "unsigned long long max value = " << u_max << endl; return 0; }
-
输出:
long long max value = 9223372036854775807 long long min value = -9223372036854775808 unsigned long long max value = 18446744073709551615
3. 扩展的整形
C++11中只定义了下面5种标准的有符号整形:
signed char
short int
int
long int
long long int
此外,标准也规定了每一种有符号整形必须对应一个无符号整形,占用位数不变。
4. 隐式类型转换
C++中允许隐式类型转换,转换原则如下:
- 转换过程中,低等级转换为高等级,有符号转换为无符号。
- 长度越大的整形等级越高。例如
long long int
等级大于int
。 - 长度相同的情况下,标准整形的等级高于扩展类型。例如
long long int
和int64
都是64位长度,而long long int
等级更高。 - 相同大小的有符号类型和无符号类型的等级相同。如
long long int
和unsigned long long int
等级相同,但如果二者要进行转换,则应该由有符号的转换为无符号的。 - 注意:C++中禁止对(void *)类型的隐式转换。