问题:在一项作业问题中(必须用笔在纸上完成,因此无需编码),我必须确定用C ++执行的加法的类型和值。
1 + 0.5
我回答的是:
integer + float = float
)解决方案:
我的问题:为什么0.5是两倍而不是浮点数?如何区分浮点数和双精度数?我的意思是,0.5在我看来就像是浮点数和两倍。
答案 0 :(得分:7)
在C ++中,默认情况下不带类型后缀的浮点文字为<Grid Margin="0,100,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Text="In auto"
Grid.Column="0" />
<Border Background="Pink"
Height="50"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
Grid.Column="1"/>
</Grid>
。如果希望它为double
,则需要指定float
后缀,例如f
。
答案 1 :(得分:5)
首先,是的。 integer
+ float
= float
。您对那部分是正确的。
问题不在于此,而在于您假设0.5
是float
。它不是。在C ++中,float literals are followed by an f表示0.5f
是一个浮点数。但是,0.5
实际上是double
。这意味着您现在的方程式是:
integer + double = double
如您所见,此结果是两倍。这就是为什么对您的问题的正确答案是结果类型为double。
顺便说一句,为了清除记录,从技术上讲,这里发生的不是integer + double = double
。发生的情况是1
受到implicit conversion的约束。本质上,1
会转换为double
,因为操作的另一面也是double
。这样,计算机将添加相同类型而不是不同类型。这意味着此处实际发生的添加更像是:
double + double = double