在c ++中输入类型转换不同变量类型之间的划分

时间:2018-04-02 11:24:15

标签: c++ c++11 type-conversion typecasting-operator

因为我是菜鸟,而Udacity Quiz叙述:

以下程序产生错误的输出。要修复程序,您需要更改至少两个变量类型:answer和其中一个除数。

问题:为什么要在相等的两边更改变量类型。

为什么不仅更改answer。根据指示,我尝试仅将float设置为answerdenominator。现在它可以工作,但我想在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教室的测验

2 个答案:

答案 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