似乎函数fun1
和fun2
应该返回相同的值,但输出不同。你能解释一下为什么会这样吗?
#include <iostream>
using namespace std;
long long fun1(int, int, int );
long long fun2(int, int, int );
int main(){
int l = 1039, b = 3749, h =8473;
cout<<"Volume is equal to "<<fun1(l,b,h)<<endl;
cout<<"Volume is equal to "<<fun2(l,b,h)<<endl;
}
long long fun1(int length, int breadth, int height){
long long volume = length * breadth * height;
return volume;
}
long long fun2(int length, int breadth, int height){
return (long long)length * breadth * height;
}
输出:
Volume is equal to -1355615565
Volume is equal to 33004122803
第一种情况:
您正在计算int
类型中的所有内容,然后转换为long long
.不幸的是,结果太大,无法容纳int
,所以你有一个溢出。即使你把它转换为更大的类型,也为时已晚,溢出已经发生。
第二种情况:
在实际执行计算之前,您正在强制转换为long long
。因此,将使用从int
到long long
的隐式转换进行计算,并且结果确实适合您的容器(现在long long
(......不溢,人生美好!