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

为何同是(0+-1)%3,C++代码输出-1和0两种结果?

为何C++中两处看似相同的取模运算结果不同?

问题出在操作数的类型差异上,两处运算的本质并不完全一致:

1. 直接计算(0 + -1) % 3的行为

这里所有操作数都是int类型(有符号整数)。在C++的规则中,当进行有符号整数的取模运算时,结果的符号与被除数保持一致。-1作为被除数,3是除数,因此-1 % 3的结果为-1。

2. getIndex方法中运算的行为

nums.size()返回的是size_t类型(无符号整数类型,通常对应系统的原生无符号整型)。在表达式(index + nums[index]) % nums.size()中:

  • index + nums[index]的结果是int类型的-1
  • 由于取模运算的两个操作数类型不一致,C++会将有符号的int值隐式转换为无符号的size_t类型。此时-1转换为size_t后会变成该类型的最大值(比如32位系统下是4294967295)
  • 用这个极大的无符号数对3取模,4294967295 % 3 = 0,最终得到结果0

如果想要让getIndex中的运算结果和直接计算一致,可以将nums.size()强制转换为int类型:

int res = (index + nums[index]) % static_cast<int>(nums.size());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:43:16