为什么X % 0是一个无效的表达式?
我一直认为X % 0应该等于X。既然你不能被零除,答案自然不应该是余数,X(所有剩余的东西)?
发布于 2011-09-10 15:10:24
C++标准(2003)在§5.6/4中规定,
...如果/或%的第二个操作数为零,则行为为未定义的;...
也就是说,以下表达式调用未定义的行为(UB):
X / 0; //UB
X % 0; //UB还要注意的是,-5 % 2并不等同于-(5 % 2) (正如Petar在他的答案的评论中所暗示的那样)。它是由实现定义的。规范上说(第5.6/4节),
...如果两个操作数都是非负的,则余数是非负的;如果不是,则余数的符号为implementation-defined.
发布于 2011-09-10 15:06:49
这个答案不适合数学家。这个答案试图给出动机(以数学精度为代价)。
Mathematicians: See here.
程序员:请记住,除以0是undefined。因此,依赖于除法的mod也是undefined。
这表示正X和D的除法;它由整数部分和小数部分组成:
(X / D) = integer + fraction
= floor(X / D) + (X % D) / D重新排列,你会得到:
(X % D) = D * (X / D) - D * floor(X / D)用0代替D
(X % 0) = 0 * (X / 0) - 0 * floor(X / 0)因为除以0是undefined
(X % 0) = 0 * undefined - 0 * floor(undefined)
= undefined - undefined
= undefined发布于 2011-09-10 15:00:46
根据的定义,X % D是a number 0 <= R < D,这样就存在Q,从而
X = D*Q + R因此,如果为D = 0,则不能存在这样的数字(因为0 <= R < 0)
https://stackoverflow.com/questions/7370154
复制相似问题