跳到正文
信奥逐课

第 037 课

整数溢出

🟢 入门 约 5 分钟

一句话理解

整数溢出是结果超出类型能表示的范围,值会绕出去。

为什么要学

溢出经常不报错,只是默默变成错的数,造成 WA。

讲解

int 最大值大约 2e9。再加 1 会变成负数。这就是补码回绕。

最隐蔽的是:long long x = a * b; 若 a、b 是 int,乘法按 int 计算时就已经溢了。

写法:long long x = 1LL * a * b;。比较大小时也可能先加后爆,改成减法比较。

例子

int a = 1000000, b = 1000000;
long long x = a * b;
long long y = 1LL * a * b;
cout << x << " " << y;

x 很可能是溢出后的脏值;y 才是 1e12。

常见错误

练习 做完再看下一课

防止 int 乘法溢出,常用写法是?

在线练习 C++ 在浏览器里编译,代码不会上传

Ctrl / ⌘ + Enter 运行 · Tab 缩进

输出
 

进度保存在本机浏览器里。

左右方向键也可翻课