首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mod Zero不能吗?

Mod Zero不能吗?
EN

Stack Overflow用户
提问于 2011-09-10 14:58:09
回答 9查看 63.1K关注 0票数 63

为什么X % 0是一个无效的表达式?

我一直认为X % 0应该等于X。既然你不能被零除,答案自然不应该是余数,X(所有剩余的东西)?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-09-10 15:10:24

C++标准(2003)在§5.6/4中规定,

...如果/或%的第二个操作数为零,则行为为未定义的;...

也就是说,以下表达式调用未定义的行为(UB):

代码语言:javascript
复制
X / 0; //UB
X % 0; //UB

还要注意的是,-5 % 2并不等同于-(5 % 2) (正如Petar在他的答案的评论中所暗示的那样)。它是由实现定义的。规范上说(第5.6/4节),

...如果两个操作数都是非负的,则余数是非负的;如果不是,则余数的符号为implementation-defined.

票数 44
EN

Stack Overflow用户

发布于 2011-09-10 15:06:49

这个答案不适合数学家。这个答案试图给出动机(以数学精度为代价)。

Mathematicians: See here.

程序员:请记住,除以0undefined。因此,依赖于除法的mod也是undefined

这表示正XD的除法;它由整数部分和小数部分组成:

代码语言:javascript
复制
(X / D) =   integer    +  fraction
        = floor(X / D) + (X % D) / D

重新排列,你会得到:

代码语言:javascript
复制
(X % D) = D * (X / D) - D * floor(X / D)

0代替D

代码语言:javascript
复制
(X % 0) = 0 * (X / 0) - 0 * floor(X / 0)

因为除以0undefined

代码语言:javascript
复制
(X % 0) = 0 * undefined - 0 * floor(undefined)
        = undefined - undefined
        = undefined
票数 14
EN

Stack Overflow用户

发布于 2011-09-10 15:00:46

根据的定义,X % Da number 0 <= R < D,这样就存在Q,从而

代码语言:javascript
复制
X = D*Q + R

因此,如果为D = 0,则不能存在这样的数字(因为0 <= R < 0)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7370154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档