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

C++模运算异常:-9%10输出-9而非预期值的问题求助

C++负数模运算结果不符合预期的解决方法

问题本质

C标准明确规定,a % b的计算结果符号与被除数a保持一致。所以(-9) % 10得到-9是符合标准的行为,并非编译器bug——g和Visual Studio的表现都是合规的。

修正方案

如果需要得到非负余数,可以通过以下方式调整计算逻辑:

分步判断写法

int val = -i - 1;
int result = val % size;
if (result < 0) {
    result += size;
}

简洁一行写法

int result = ((-i - 1) % size + size) % size;

这种写法能确保最终结果始终落在[0, size-1]的非负区间内,完全匹配你预期的余数结果。

验证案例

当i=8、size=10时:

  1. 先计算-i-1 = -9
  2. -9 % 10得到-9
  3. -9 + 10 = 1
  4. 1 % 10最终得到1,与预期一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:55:55