不同类型变量之间的划分 | C++ 中的隐式类型转换
Division between variable of different types | implicit type casting in C++
由于我是 C++ 菜鸟,而 Udacity Quiz 叙述:
以下程序产生了错误的输出。要修复程序,您需要更改至少两种变量类型:answer
和其中一个除数。
#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;
}
问题:类型转换在这里意味着什么以及为什么要在相等的两边改变变量类型。
为什么不只改变answer
。按照指示,我尝试仅将 float
设置为 answer
和 denominator
。现在它可以工作了,但我想学习 C++ 中的隐式类型转换。
PS: 代码是优达学城课堂的小测验
如果表达式的两个操作数
numerator / denominator
有整数类型那么表达式的结果也有公共整数。
要使结果成为浮点类型,其中一个操作数必须是浮点类型。
另一方面,如果变量 result 具有整数类型,则可以截断浮点类型表达式
numerator / denominator
除法发生在赋值之前。两个整数相除的结果是一个整数。这就是截断发生的地方,所以我们知道至少有一个操作数需要是浮点数才能保持精度。
然后,如您所知,分配发生。整数变量无法保持 floating-point 结果的精度,因此也需要是浮点数。
这意味着如果除法的操作数不同,那么一个将被提升以匹配另一个。喜欢
int numerator = 4;
float denominator = 5;
除法:
numerator / denominator;
numerator
将提升为浮动。正如本 answer
中所指出的
float / int => float / float = float
int / int = int
由于我是 C++ 菜鸟,而 Udacity Quiz 叙述:
以下程序产生了错误的输出。要修复程序,您需要更改至少两种变量类型:answer
和其中一个除数。
#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;
}
问题:类型转换在这里意味着什么以及为什么要在相等的两边改变变量类型。
为什么不只改变answer
。按照指示,我尝试仅将 float
设置为 answer
和 denominator
。现在它可以工作了,但我想学习 C++ 中的隐式类型转换。
PS: 代码是优达学城课堂的小测验
如果表达式的两个操作数
numerator / denominator
有整数类型那么表达式的结果也有公共整数。
要使结果成为浮点类型,其中一个操作数必须是浮点类型。
另一方面,如果变量 result 具有整数类型,则可以截断浮点类型表达式
numerator / denominator
除法发生在赋值之前。两个整数相除的结果是一个整数。这就是截断发生的地方,所以我们知道至少有一个操作数需要是浮点数才能保持精度。
然后,如您所知,分配发生。整数变量无法保持 floating-point 结果的精度,因此也需要是浮点数。
这意味着如果除法的操作数不同,那么一个将被提升以匹配另一个。喜欢
int numerator = 4;
float denominator = 5;
除法:
numerator / denominator;
numerator
将提升为浮动。正如本 answer
float / int => float / float = float
int / int = int