了解类 C 语言中带负值的模运算符的行为
C 派生语言中的模运算符 (%),例如C、C 和 Obj-C 在处理负数时可能会导致意外结果。这可能会令人沮丧,尤其是对于那些具有数学背景的人来说。在本次讨论中,我们将深入研究该问题并探索处理模运算中负值的解决方案。
需要记住的一个关键方面是模运算反映了整数除法后的余数。但是,对于负数,根据 C 标准,余数的符号是实现定义的。这种不一致可能会导致令人惊讶的输出,例如 (-1) % 8 返回 -1 而不是预期的 7。
为了应对这一挑战,我们可以利用以下方法:
<code class="c">int mod(int a, int b) { if (b < 0) return -mod(-a, -b); int ret = a % b; if (ret < 0) ret += b; return ret; }</code>
该解决方案同时适用于正操作数和负操作数。如果余数为负,则通过添加除数来确保余数始终为正。因此,mod(-1, 8) 将返回 7,而 mod(13, -8) 将返回 -3,提供一致且直观的行为。
以上是为什么类 C 语言中模运算符 (%) 对负值的表现不同?的详细内容。更多信息请关注PHP中文网其他相关文章!