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

发布于 2022-09-13 01:06:59 字数 260 浏览 19 评论 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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

铃予 2022-09-20 01:06:59

这个题意义不大

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

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

倒数 2022-09-20 01:06:59

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

-0

关于 -0, 详见这里

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文