首页 >后端开发 >C++ >为什么模运算符使用负数会产生负结果?

为什么模运算符使用负数会产生负结果?

Barbara Streisand
Barbara Streisand原创
2024-12-17 09:55:25205浏览

Why Does the Modulo Operator Produce Negative Results with Negative Numbers?

模运算符产生负值:数学解释

模运算符 % 当应用于负数时,可以产生不同的结果,具体取决于关于实施。这可能令人费解,但了解模运算符的数学定义可以阐明这种行为。

根据 ISO14882:2011(e) 5.6-4,模运算符返回除法的余数第一个表达由第二个表达。如果第二个操作数为零,则行为未定义。对于整数操作数,商是舍去任何小数部分的代数商。

为了说明这一点,请考虑以下示例:

std::cout << (-7 % 3) << std::endl; // -1
std::cout << (7 % -3) << std::endl; // 1

(-7 % 3) = -1

  • -7 除以 3 得到-2 的代数商。
  • -2 乘以 3 得到 -6。
  • -7 除以 3 的余数为 -1。

(7 % -3) = 1

  • 7 除以 -3 得到代数商 -2。
  • -2 乘以 -3 得到 6。
  • 余数因此 7 除以 -3 等于 1。

请注意,在情况下,代数商是相同的 (-2)。当两个操作数具有不同符号时,余数的差异是由实现定义的余数符号引起的。

以上是为什么模运算符使用负数会产生负结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn