关于三目运算符的一些细节
  • 板块学术版
  • 楼主zifanwang
  • 当前回复15
  • 已保存回复15
  • 发布时间2022/11/11 19:43
  • 上次更新2023/10/27 03:22:47
查看原帖
关于三目运算符的一些细节
329857
zifanwang楼主2022/11/11 19:43

我的一个同学在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

想问一下如何确定这个返回值的类型以及原因。

2022/11/11 19:43
加载中...