C++ 文字整数类型
C++ literal integer type
文字表达式也有类型吗?
long long int a = 2147483647+1 ;
long long int b = 2147483648+1 ;
std::cout << a << ',' << b ; // -2147483648,2147483649
int a = INT_MAX ;
long long int b = a + 1 ; // adds 1 to a and convert it then to long long ing
long long int c = a; ++c; // convert a to long long int and increment the result with 1
cout << a << std::endl; // 2147483647
cout << b << std::endl; // -2147483648
cout << c << std::endl; // 2147483648
cout << 2147483647 + 1 << std::endl; // -2147483648 (by default integer literal is assumed to be int)
cout << 2147483647LL + 1 << std::endl; // 2147483648 (force the the integer literal to be interpreted as a long long int)
您可以找到有关整数文字的更多信息 here。
是的,文字数字有类型。无后缀十进制整数文字的类型是int
、long
、long long
中第一个可以表示整数的类型。二进制、十六进制和八进制文字的类型选择类似,但列表中也有无符号类型。
您可以通过使用 U
后缀强制使用无符号类型。如果您在后缀中使用单个 L
,则类型至少为 long
,但如果不能表示为 long
,则可能为 long long
。如果您使用 LL
,则类型必须是 long long
(除非实现扩展类型比 long long
更宽)。
结果是如果 int
是 32 位类型而 long
是 64 位类型,那么 2147483647
的类型是 int
而 2147483648
类型为 long
。这意味着 2147483647+1
会溢出(这是未定义的行为),而 2147483648+1
只是 2147483649L
.
这是由 C++ 标准的 §2.3.12 ([lex.icon]
) 第 2 段定义的,以上描述是该部分 Table 7 的摘要。
请务必记住,赋值目标的类型不会以任何方式影响赋值右侧表达式的值。如果你想强制计算得到 long long
结果,你需要强制计算的某些参数为 long long
;仅仅分配给一个 long long
变量是不够的:
long long a = 2147483647 + 1LL;
std::cout << a << '\n';
产生
2147483648
文字表达式也有类型吗?
long long int a = 2147483647+1 ;
long long int b = 2147483648+1 ;
std::cout << a << ',' << b ; // -2147483648,2147483649
int a = INT_MAX ;
long long int b = a + 1 ; // adds 1 to a and convert it then to long long ing
long long int c = a; ++c; // convert a to long long int and increment the result with 1
cout << a << std::endl; // 2147483647
cout << b << std::endl; // -2147483648
cout << c << std::endl; // 2147483648
cout << 2147483647 + 1 << std::endl; // -2147483648 (by default integer literal is assumed to be int)
cout << 2147483647LL + 1 << std::endl; // 2147483648 (force the the integer literal to be interpreted as a long long int)
您可以找到有关整数文字的更多信息 here。
是的,文字数字有类型。无后缀十进制整数文字的类型是int
、long
、long long
中第一个可以表示整数的类型。二进制、十六进制和八进制文字的类型选择类似,但列表中也有无符号类型。
您可以通过使用 U
后缀强制使用无符号类型。如果您在后缀中使用单个 L
,则类型至少为 long
,但如果不能表示为 long
,则可能为 long long
。如果您使用 LL
,则类型必须是 long long
(除非实现扩展类型比 long long
更宽)。
结果是如果 int
是 32 位类型而 long
是 64 位类型,那么 2147483647
的类型是 int
而 2147483648
类型为 long
。这意味着 2147483647+1
会溢出(这是未定义的行为),而 2147483648+1
只是 2147483649L
.
这是由 C++ 标准的 §2.3.12 ([lex.icon]
) 第 2 段定义的,以上描述是该部分 Table 7 的摘要。
请务必记住,赋值目标的类型不会以任何方式影响赋值右侧表达式的值。如果你想强制计算得到 long long
结果,你需要强制计算的某些参数为 long long
;仅仅分配给一个 long long
变量是不够的:
long long a = 2147483647 + 1LL;
std::cout << a << '\n';
产生
2147483648