You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode中C++整数溢出问题:long为何失效及优雅解法问询

问题原因与解决方法

为什么long c = a+1;和long d = (long)(a+1);会失效?

核心原因是运算优先级与类型提升规则:

  • a是int类型,a+1的两个操作数均为int,因此整个加法运算会在int的数值范围内执行。当a取int最大值时,a+1直接触发整数溢出,生成错误的int值(即你看到的-2147483648)。
  • 不管是把这个溢出后的错误值赋值给long,还是对溢出结果做强制转换,都只是将已出错的int值扩展为long类型,无法修复溢出导致的数值错误。

更简洁的解决方法

只需提前将int类型的a转换为long,再执行加法操作,就能让运算在long的范围内进行,彻底避免溢出:

int a = (1 << 31) - 1;
// 方法1:C风格强制转换
long c = (long)a + 1;
// 方法2:C++推荐的static_cast类型转换
long d = static_cast<long>(a) + 1;
cout << "c = " << c << endl;
cout << "d = " << d << endl;
>>> c = 2147483648
>>> d = 2147483648

这里a先被提升为long类型,+1的运算会以long的精度执行,自然不会触发溢出问题。

内容的提问来源于stack exchange,提问作者x86_64

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:30:56