gpt4 book ai didi

c++ - 为什么int提升为double而不是float进行隐式转换

转载 作者:太空宇宙 更新时间:2023-11-04 15:34:09 24 4
gpt4 key购买 nike

我目前正在学习 C++ 和 C++ Primer。在关于类型转换的 4.11 章中,我注意到该章很少讨论从整数类型到浮点类型的隐式转换,而是真正主要关注整数类型内的转换。因此,我不太确定从整数类型到浮点类型的转换规则。

我的问题来自本章的例子:

int ival = 3.541 + 3

该章提到在添加 3.541 之前将 3 转换为 double 类型。

问题源于这样一个事实,即对于大多数整数类型,它们大多在隐式转换期间被提升为 int,除非它们无法适合 int。既然intfloat都是一样的4字节大小,那3.0和3.541完全可以装成一个float,为什么高阶double 在这种情况下用于隐式转换而不是 float?这是否意味着对于任何整数类型到浮点类型的隐式转换,整数类型将被转换为 double 而不管精度或大小?

非常感谢!

最佳答案

3.541 是 double 。所以这就是另一个参数需要转换成的。

后缀用于表示文字的精度,3.541f(或 F)将是一个 float ,3.541L(或 l)将是一个 long double .默认(无后缀)是 double 的。来源http://en.cppreference.com/w/cpp/language/floating_literal .

3.541 不适合任何这些长度,因为它是二进制的重复分数。实际值将是尽可能接近 3.541 的浮点值(如 3.540999999999999925393012745189480483531951904296875 在 double 的情况下)。

关于c++ - 为什么int提升为double而不是float进行隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39329782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com