首页 >后端开发 >C++ >为什么类 C 语言中模运算符 (%) 对负值的表现不同?

为什么类 C 语言中模运算符 (%) 对负值的表现不同?

Patricia Arquette
Patricia Arquette原创
2024-11-03 18:09:30630浏览

Why Does the Modulo Operator (%) Behave Differently with Negative Values in C-Like Languages?

了解类 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中文网其他相关文章!

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