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时:
- 先计算
-i-1 = -9 -9 % 10得到-9-9 + 10 = 11 % 10最终得到1,与预期一致。
内容的提问来源于stack exchange,提问作者farhan jatt
相关产品推荐
相关产品推荐

