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

为何C++使用long long int仍输出负结果 溢出问题求助

问题原因

核心问题是整数溢出,和你最终用来存结果的long long int变量无关,问题出在运算过程的类型规则上:

  • 你定义的A、B、C、D均为int类型,宏percent替换后是整数10,也属于int范畴
  • C/C++的运算规则中,同基础类型的变量运算时,会先按照原类型完成计算,不会自动升级到更大容量的类型,除非运算过程中已经出现了更高精度的操作数。
    你代码里A*B*C*D的计算结果是2520000000,而32位int的取值范围是-2147483648 ~ 2147483647,计算结果远超过int的最大值,触发有符号整数溢出,这属于未定义行为,最常见的表现就是结果变为负数。
  • 等(percent*(A*B*C*D))/100整个表达式计算完成后,得到的已经是溢出后的错误int值,此时再赋值给long long int类型的变量,只是把错误值转换为long long格式,不会修正之前的溢出问题。

修复方案

你只需要保证运算过程是按照long long类型执行即可,常见修改方式有三种:

  • 在运算开头加入long long类型的字面量1LL,触发全链路类型升级:
non_Zero_value_number = (percent * (1LL * A * B * C * D)) / 100;
  • 直接把A、B、C、D的定义改为long long类型:
long long A=200,B=400,C=150,D=210;
  • 把宏定义改为long long类型的字面量:
#define percent 10LL

内容的提问来源于stack exchange,提问作者Safayet Hossain Sobuj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:09:03