在C89/90中,两种结果都是允许的.你从除法和余数得到的结果需要"适合"在一起,以便(a/b)*b + a%b == a.
从C99开始,需要使用负输入的整数除法将其截断为零.尽管如此,仍然需要除法和余数之间的关系.这意味着(实际上)余数运算的结果总是与左操作数具有相同的符号,因此25%-9必须产生7而不是-2.
对于它的价值,C++遵循大致相同的路径,仅落后C几年.C++ 98/03具有与C89/90相同的规则,因此对于您的输入,剩余部分可能是负数或正数(但仍需要与分裂的结果相配合).从C++ 11开始,它需要与C99相同的行为,因此25% - 9 == 7.
其他一些语言(例如Python)要求其余部分的结果与右操作数的符号相同.