为什么将0乘以负双倍使其变为-0?

时间:2017-10-09 00:14:48

标签: c++

cout << 0 * -5 << endl; // this is zero
cout << 0 * -5.0 << endl; // this is negative zero

我是c ++的新手,我不明白为什么乘以一个double会影响零次,因为它应该总是为零。

2 个答案:

答案 0 :(得分:2)

在第一行,

cout << 0 * -5 << endl;

0和-5都是有符号整数。整数不区分0-0

在第二行,

cout << 0 * -5.0 << endl;

第二个数字是double,因此0也被提升为double,IEEE浮点定义了0-0值。

答案 1 :(得分:1)

它来自整数和双精度计算之间的差异。第一个表达式在两个整数之间完成,但第二个表达式在两个浮点数之间。