除以零后剩余

use*_*586 1 c c++ integer-division

我知道在数学中不允许除零,但我可以使用0的模数,我应该得到什么答案?

例如

10%0 = ?
5%0 = ?
Run Code Online (Sandbox Code Playgroud)

Mat*_*son 10

该标准将其定义为"未定义".

在几乎所有处理器中,模数由与除法相同的功能执行.在现代较大的处理器中,它是一条指令(例如x86).大多数情况下,此指令在除以零时会产生陷阱,这适用于代码是"打算使用模"还是"商"部分.

它是未定义的,因此处理器和编译器可以自由地实现它们想要的东西 - 例如,如果处理器只返回输入的内容,也允许,或者如果它导致整个操作系统崩溃,那么"好"也是标准.

总之,零的模数与除以零一样糟糕.

(注意,通常情况下,浮点除以零不会捕获[默认],并产生无穷大值,除非分割的值也为零,在这种情况下,您得到"不是数字")


ST3*_*ST3 7

在C/C++中,它是未定义的行为,您可以根据编译器甚至同一程序的不同实例获得各种结果.

C11dr§6.5.5

二元/运算符产生商,二元%运算符从第一个表达式除以第二个表达式得到余数.如果/或%的第二个操作数为零,则行为未定义