assert(-1 % 10 == -1) //Expecting 9
当他来问我这个问题时,我告诉他:“嗯,那很有道理。当你将-1除以10时,余数是-1,商是0。”然而,他的论点是模运算应该遵循“始终为正”的模型。我做了一些研究,发现他所指的模数如下所示: 引用: 设q是a和n的整数商,r是余数。则: a = n * q + r 然而,I使用的定义似乎是Knuth版本的模数,它是这样的: 引用: 设q是a除以n的底数。r是余数。则: r = a - n * q 因此,我的问题是为什么在FORTRAN标准(随后是C标准)中,模运算符会向0截断?对我来说,把它称为“模数”而不是“余数”似乎是一个错误的称呼(在数学上,答案应该是9)。这是否与硬件执行除法有关? 参考资料:
- 取模运算符的维基百科页面
- “modulus”运算符的MSDN条目
(是的,我知道它是针对VS2003的...但我现在被困住了。Sadface) - 取模运算符的变化
- 不要假设余数为正数...
简而言之:硬件是使取模运算符向0截断的原因吗?