因为我是菜鸟,而Udacity Quiz叙述:
以下程序产生错误的输出。要修复程序,您需要更改至少两个变量类型:answer
和其中一个除数。
问题:为什么要在相等的两边更改变量类型。
为什么不仅更改answer
。根据指示,我尝试仅将float
设置为answer
和denominator
。现在它可以工作,但我想在c ++中学习隐式类型转换。
#include <iostream>
int main(void)
{
int numerator = 4; // no need to change type
float denominator = 5.0; // changed to float
float answer = 0.0; // changed to float
answer = numerator / denominator;
std::cout<<"answer = "<<answer; // answer = 0.8
return 0;
}
PS:代码是Udacity教室的测验
答案 0 :(得分:2)
如果表达式的两个操作数
numerator / denominator
如果表达式也有公共整数,那么结果是整数类型。
要生成浮点类型的结果,其中一个操作数必须是浮点类型。
另一方面,如果变量结果具有整数类型,则可以截断浮动类型表达式
numerator / denominator
答案 1 :(得分:1)
除法发生在分配之前。两个整数之间的除法结果是整数。这就是截断发生的地方,所以我们知道至少有一个操作数需要浮动才能保持精度。
然后,如您所知,分配发生。整数变量不能保持浮点结果的精度,因此也需要浮点数。
这意味着如果除法的操作数不同,那么将提升一个以匹配另一个。喜欢
int numerator = 4;
float denominator = 5;
分裂:
numerator / denominator;
numerator
将被提升为浮动。正如此answer
float / int => float / float = float
int / int = int