为什么整数计算得到0而浮点数计算得到负0

新手上路,请多包涵

为什么浮点数这样计算

int main() {
    double a = 0, b = 1;
    printf("%f", -a / b);
}

得到的是 -0.000000

而换成整数计算

int main() {
    int a = 0, b = 1;
    printf("%d", -a / b);
}

得到的就是0

阅读 3.2k
2 个回答

这个题意义不大

  1. 本身负0和正0是想等的。
  2. 对于浮点数的比较,不建议直接用==,而是比较是否相差绝对值在一个很小的范围内,所以正负0本身也 不会有特别的影响。

至于结果产生的原因,和数据的表示等相关,这个其实除非是开发编译器之类的,一般不用深究。

这是因为,在浮点数中,+0 和 -0 在内存中的表示方式是不同的。而整数是相同的。所以 printf 对浮点数(%f)会有 -0 和 +0,而整数(%d)则没有。

-0

关于 -0, 详见这里