可能重复:
Modulus operation with negatives values - weird thing ??
Mod of negative number is melting my brain!
我试着做25 % -9只是为了好玩,我得到的答案是-2 (这是在谷歌上),当我用C代码做这件事时,我得到了7。有人能解释为什么两个不同的答案吗?
发布于 2014-08-29 18:00:57
在C89/90中,这两种结果都是允许的。从除法和余数中得到的结果被要求“整合”在一起,以便(a/b)*b + a%b == a。
从C99开始,需要用负输入的整数除法来截断为零。然而,除法的结果和余数之间的关系仍然是必需的。这意味着(实际上)余数运算的结果总是与左操作数有相同的符号,所以25 % -9必须产生7,而不是-2。
就其价值而言,C++遵循的路径大致相同,只比C++98/03落后几年,其规则与C89/90相同,因此对于您的输入,其馀部分可能是负数或正值(但仍然需要与除法的结果相吻合)。从C++11开始,它需要与C99相同的行为,所以25 %-9 == 7.
其他一些语言(例如Python)要求余数的结果与正确的操作数具有相同的符号。
发布于 2011-01-10 10:41:09
如果你在9的数学基础上想一想,它们和9-2 =7是一样的。
https://stackoverflow.com/questions/4645897
复制相似问题