C++ 为什么long在c++;不能容纳2500^3 #包括 使用名称空间std; int main(){ 长a=2501*2501*2501; cout

C++ 为什么long在c++;不能容纳2500^3 #包括 使用名称空间std; int main(){ 长a=2501*2501*2501; cout,c++,long-integer,C++,Long Integer,long-long肯定可以保存此值。问题是,用于计算它的表达式,即2501*2501*2501,是一个int表达式。编译器使用整数计算结果。这会导致溢出,因为结果不适合32位。因此,结果变为整数在编译器知道该值进入long变量之前有效 将LL后缀添加到其中一个数字以解决问题: #include <iostream> using namespace std; int main() { long long a=2501*2501*2501; cout<<a

long-long肯定可以保存此值。问题是,用于计算它的表达式,即
2501*2501*2501
,是一个
int
表达式。编译器使用整数计算结果。这会导致溢出,因为结果不适合32位。因此,结果变为整数在编译器知道该值进入
long
变量之前有效

LL
后缀添加到其中一个数字以解决问题:

#include <iostream>
using namespace std;

int main() {

    long long a=2501*2501*2501;
    cout<<a;

    return 0;
}

2501是int,不是long long long。32位是
int
的典型大小,但标准只保证它至少是16位。因此,
int
可以是64位。有什么理由不在每个整数文本的末尾加上
LL
?我希望整数文本是“无类型的”@KeithThompson对,32是开的根据我的猜测,知道发生了错误。这些天来,命中
int
大小小于32位的非嵌入式C编译器的几率很小,所以我在这里碰碰运气。@AaronMcDaid可读性就是这样一个原因。不过,一般来说,编译器应该发出溢出警告(最好将所有警告都视为错误)。
long long a=2501LL*2501*2501;