我的一个同学在CSP考场上T2写了下面的一段代码:
ll ans1=((askmxp(l1,l2)==-1)?(-1e18):askmxp(l1,l2)*askmnb(r1,r2));
其中askmxp和askmnb的返回值都为ll类型(long long)。
结果爆0了。。。
然后发现如果把-1e18改成-1000000000000000000就100了。
然后我就做了下面的一个实验:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll ans,a,b;
signed main(){
a=965697923,b=751739638;
ans=1==1?a*b:1e18;
cout<<ans<<endl;
double x=965697923,y=751739638;
ans=x*y;
cout<<ans<<endl;
ll xx=965697923,yy=751739638;
ans=xx*yy;
cout<<ans<<endl;
return 0;
}
输出的结果是:
725953407053371904
725953407053371904
725953407053371874
发现1==1?a*b:1e18的返回值为double。
想问一下如何确定这个返回值的类型以及原因。