lim*_*ade 3 c++ floating-point language-lawyer implicit-conversion
问题:在一项家庭作业问题中(必须用笔在纸上完成,因此无需编码),我必须确定用C ++执行的加法的类型和值。
1 + 0.5
Run Code Online (Sandbox Code Playgroud)
我已经回答的是:
integer + float = float)解决方案说:
我的问题:为什么0.5是两倍而不是浮点数?如何区分浮点数和双精度数?我的意思是,0.5在我看来就像是浮点数和两倍。
首先,是的。integer+ float= float。您对那部分是正确的。
问题不在于此,而在于您的假设0.5是float。它不是。在C ++中,浮点字面量后跟一个f,0.5f表示浮点数。但是,0.5实际上是一个double。这意味着您的等式现在为:
integer + double = double
Run Code Online (Sandbox Code Playgroud)
如您所见,此结果是两倍。这就是为什么对您的问题的正确答案是结果类型为double的原因。
顺便说一句,为了清除记录,从技术上讲,这里没有发生什么integer + double = double。发生的事情是即将1接受隐式转换。本质上,将1a转换为a double,因为操作的另一面也是a double。这样,计算机将添加相同类型而不是不同类型。这意味着此处实际发生的添加更像是:
double + double = double
Run Code Online (Sandbox Code Playgroud)