C语言 强制转换:函数 fun1 和 fun2 的值应该相同,但输出不同.你能解释一下为什么会这样吗?



似乎函数fun1fun2应该返回相同的值,但输出不同。你能解释一下为什么会这样吗?

#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。因此,将使用从intlong long的隐式转换进行计算,并且结果确实适合您的容器(现在long long(......不溢,人生美好!

相关内容

  • 没有找到相关文章

最新更新