为什么0%0会导致1?

时间:2014-02-16 15:11:01

标签: c++ undefined-behavior modulus

我的代码:

long long difft, intrv ;

cout << "difft = " << difft << endl;
cout << "intrv = " << intrv << endl;
cout << "difft mod intrv = " << difft%intrv << endl;

输出:

 difft = 0
 intrv = 0
 difft mod intrv = 1

0%0的结果为零,但在我的代码中结果是“1”,为什么?

3 个答案:

答案 0 :(得分:9)

C ++ 中,任何mod 0的结果都是undefined behavior,来自draft C++ standard部分5.6 Multiplicative运算符 4 说(强调我的):

  

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

此外,使用未初始化的变量也是未定义的行为,因此该程序的行为是不可预测的。

答案 1 :(得分:6)

这是未定义的行为,因为modulo涉及除零。

答案 2 :(得分:1)

你不能除以0!这是一个编译器错误,它允许你这样做。这就是你看到1的原因。