是否保证C++标准(-x) % m
(c++0x) 中的, wherex
和m
are positive是负数并且等于?-(x % m)
我知道它在我知道的所有机器上都是正确的。
是否保证C++标准(-x) % m
(c++0x) 中的, wherex
和m
are positive是负数并且等于?-(x % m)
我知道它在我知道的所有机器上都是正确的。
In addition to Luchian's answer, this is the corresponding part from the C++11 standard:
The binary / operator yields the quotient, and the binary % operator yields the remainder from the division of the first expression by the second. If the second operand of / or % is zero the behavior is undefined. For integral operands the / operator yields the algebraic quotient with any fractional part discarded; if the quotient a/b is representable in the type of the result, (a/b)*b + a%b is equal to a.
Which misses the last sentence. So the part
(a/b)*b + a%b is equal to a
Is the only reference to rely on, and that implies that a % b
will always have the sign of a
, given the truncating behaviour of /
. So if your implementation adheres to the C++11 standard in this regard, the sign and value of a modulo operation is indeed perfectly defined for negative operands.
4) 二元 / 运算符产生商,二元 % 运算符产生第一个表达式除以第二个表达式的余数。如果 / 或 % 的第二个操作数为零,则行为未定义;否则 (a/b)*b + a%b 等于 a。如果两个操作数都是非负数,则余数是非负数;如果不是,则余数的符号是实现定义的(强调我的)
这是来自 C++03。:(