我一直想知道这样的代码实际上是如何工作的:
int a = 10;
int b = 20;
double c = a * b;
如果整数太大以至于 a*b
大于可以存储在整数类型变量中的最大值怎么办。编译器会注意到目标类型可以容纳更大的值并首先将这些值转换为 double
,还是乘法会溢出/回绕?
最佳答案
当将两个整数值相乘时,编译器永远不会自行将结果转换为浮点类型。也就是说,如果将两个 int
值相乘,结果也将是一个 int
值。
因此,您的代码有效地做的是:
int a = 10;
int b = 20;
int tmp = a * b; // Result is actually an int
double c = (double)tmp; // Convert to a double.
因此,只有当结果不能存储在 int 中时,结果才会溢出。对 double
的转换和赋值仅在计算结果后完成。
关于c++ - 两个整数相乘,结果存入浮点型变量,结果能溢出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29014435/