对于 int a, b
,当仅有 a
和 b
中的一个为负数时,a / b
和 a % b
的结果会依赖于计算机。但是当 b
不为零时,是否始终满足 (a / b * b) + a % b == a
呢?
C++11 §5.6[expr.mul]/4规定:
如果商在结果类型中是可表示的,则( a/b ) * b + a%b 等于a。
C11 §6.5.5/6有稍微不同的措辞,但也指出了同样的规则:
如果商是可表示的,则(a/b)*b + a%b应等于a;否则,和的行为将是未定义的。
a==INT_MIN
并且 b==-1
,则相等性为假(行为未定义)。 - R.. GitHub STOP HELPING ICE
b
非零时,等式始终成立。 - R.. GitHub STOP HELPING ICE