Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于隐式转换,为什么int提升为double而不是float 我目前正在学习C++思想C++入门。在关于类型转换的第4.11章中,我注意到这一章很少讨论从整数类型到浮点类型的隐式转换,而是主要关注整数类型内的转换。因此,我不能确定从整数类型到浮点类型的转换规则_C++_Floating Point_Double_Implicit Conversion - Fatal编程技术网

对于隐式转换,为什么int提升为double而不是float 我目前正在学习C++思想C++入门。在关于类型转换的第4.11章中,我注意到这一章很少讨论从整数类型到浮点类型的隐式转换,而是主要关注整数类型内的转换。因此,我不能确定从整数类型到浮点类型的转换规则

对于隐式转换,为什么int提升为double而不是float 我目前正在学习C++思想C++入门。在关于类型转换的第4.11章中,我注意到这一章很少讨论从整数类型到浮点类型的隐式转换,而是主要关注整数类型内的转换。因此,我不能确定从整数类型到浮点类型的转换规则,c++,floating-point,double,implicit-conversion,C++,Floating Point,Double,Implicit Conversion,我的问题来自本章的示例: int ival = 3.541 + 3 本章提到,在添加3.541之前,3已转换为double类型 这个问题源于这样一个事实:对于大多数整型类型,除非它们无法适应int,否则在隐式转换过程中,它们大多被提升为int。既然int和float都是相同大小的4字节,而且3.0和3.541可以完美地放入float,为什么在这种情况下,与float相反,高阶双精度用于隐式转换?这是否意味着对于任何整数类型到浮点类型的隐式转换,无论精度或大小,整数类型都将转换为双精度 非常感谢

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

int ival = 3.541 + 3
本章提到,在添加3.541之前,3已转换为
double
类型

这个问题源于这样一个事实:对于大多数整型类型,除非它们无法适应
int
,否则在隐式转换过程中,它们大多被提升为
int
。既然
int
float
都是相同大小的4字节,而且3.0和3.541可以完美地放入
float
,为什么在这种情况下,与
float
相反,高阶
双精度
用于隐式转换?这是否意味着对于任何整数类型到浮点类型的隐式转换,无论精度或大小,整数类型都将转换为双精度


非常感谢

3.541
是双精度编码。这就是另一个参数需要转换的地方

后缀用于表示文字的精度,
3.541f
(或F)为浮点,
3.541L
(或l)为长双精度。默认值(无后缀)为双精度。来源


3.541不适合任何长度,因为它是二进制的重复分数。实际值将是尽可能接近3.541的浮点值(如双精度时为3.5409999999992393012745189480483351951904296875)。

3.541
为双精度。这就是另一个参数需要转换的地方

后缀用于表示文字的精度,
3.541f
(或F)为浮点,
3.541L
(或l)为长双精度。默认值(无后缀)为双精度。来源


3.541不适合任何长度,因为它是二进制的重复分数。实际值将是尽可能接近3.541的浮点值(如双精度时为3.54099999999925393012745189480483351951904296875)。

默认情况下,如果您写入以下内容:

int ival = 3.541 + 3;
3.541
将被视为
double
,因为没有任何后缀,这是编译器默认假定的。如果希望将其视为浮点数,请执行以下操作:

int ival = 3.541f + 3; //See the 'f' there. For floats

此外,如果您想知道为什么有时
3.1541
不能正确表示,可能是因为它的二进制表示不够准确。默认情况下,如果您编写以下内容,请阅读:

int ival = 3.541 + 3;
3.541
将被视为
double
,因为没有任何后缀,这是编译器默认假定的。如果希望将其视为浮点数,请执行以下操作:

int ival = 3.541f + 3; //See the 'f' there. For floats

此外,如果您想知道为什么有时
3.1541
不能正确表示,可能是因为它的二进制表示不够准确。Read

3.541根本无法放入浮点,它是二进制的重复分数。如果这样做,则使用浮点。3.541根本无法放入浮点,它是二进制的重复分数。如果这样做,则使用浮点。