c++ - 两个整数相乘,结果存入浮点型变量,结果能溢出吗?

标签 c++

我一直想知道这样的代码实际上是如何工作的:

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/

相关文章:

c++ - 类的友元函数

c++ - 将文本文件中的数据读入 C++ 结构

C++ : In Class Assignment operator function why do we have to return *this

c++ - 无法将 'const T*' 转换为 'T*&&'

c++ - 公共(public)成员未初始化

C++ 0x lambda按值捕获总是const?

c++ - boost::bind() 绑定(bind)额外的参数?

c++ - 面试题; Effective C++ 的主题是什么?

c++ - C++ 的 gzstream 库 : corrupted file created

c++ - 有没有c++的非英文语法