【发布时间】:2020-08-22 14:21:02
【问题描述】:
下面我有一个简单的 C++ 代码来生成长度为 18 的数字。当我调用 gen_nums 函数时,i 等于 1569325055,就好像我分配给 i 变量的数字是太大了。
#include <iostream>
using namespace std;
void gen_nums(){
int i = 99999999999999999;
cout << i <<endl;
}
int main()
{
gen_nums();
return 0;
}
【问题讨论】:
-
当您打开警告时,编译器是否会说明此代码?
-
特定架构上的数据类型具有特定的大小。 C++ 标准保证某些类型的最小大小,但不保证最大大小。也就是说,在大多数现代桌面系统(例如非嵌入式)上,整数是 4 个字节。 en.cppreference.com/w/cpp/language/types
-
如果您在代码顶部使用
#include <limits>,您可以在main中写入std::cout << "Maximum integer size: " << std::numeric_limits<int>::max() << std::endl;,以查看整数可以在您的系统上保存的最大值。 en.cppreference.com/w/cpp/types/numeric_limits -
“好像我分配给
i变量的数字太大了。” -- 看起来你已经知道发生了什么。你有什么理由怀疑你的结论吗?
标签: c++ integer literals integer-overflow