为了账号安全,请及时绑定邮箱和手机立即绑定

这个程序输出为什么是15啊。。 不懂

5aab8a3000013cbc07440992.jpg
define要执行两次?

正在回答

6 回答

关键就是运算符的比较级大小!

0 回复 有任何疑惑可以回复我~
#1

weixin_慕码人5022369

10*10<15?10;15 乘法运算比三目运算的比较级大
2019-11-27 回复 有任何疑惑可以回复我~

bug:   int res = 5 * min(2 , 3);计算结果为2,原因就在于它被展开为: res = 5 * 2 > 3? 2: 3;

3 回复 有任何疑惑可以回复我~

K=10*(MIN(i,j))

0 回复 有任何疑惑可以回复我~

三目运算符判断语句为真输出?后的语句;并且根据宏定义那个函数也是求两个数中的较小的数。所以的确应该是10呀

0 回复 有任何疑惑可以回复我~
#1

再睡一会就码 提问者

我以为答案是100 但是答案是15 我问同学他那意思是先算出100 然后在把100传给x 在去三目运算符就变成了100<15?100:15 然后输出15 就是这才不懂啊 他不会是强行解释吧 ?
2018-03-16 回复 有任何疑惑可以回复我~
#2

再睡一会就码 提问者

懂了 看了楼上的 这都是我自己瞎想的 哈哈。。
2018-03-16 回复 有任何疑惑可以回复我~
#3

qq_无名_120

应该是优先级的问题吧,三目运算符的优先级低于乘法运算符,因此先算乘法
2018-03-18 回复 有任何疑惑可以回复我~

所以变成了10*x < y ? x:y

1 回复 有任何疑惑可以回复我~
#1

慕用8327027

我懂了,因为宏定义存在隐患:就比如这个 如果遇到如:c * Add(a,b) * d的时候就会出现问题,代数式的本意是a+b然后去和c,d相乘,但是因为使用了define(它只是一个简单的替换),所以式子实际上变成了c*a + b*d
2018-03-16 回复 有任何疑惑可以回复我~
#2

世末理想乡 回复 慕用8327027

是的,宏定义只是简单的用一个符号代替一个符号
2018-03-16 回复 有任何疑惑可以回复我~
#3

再睡一会就码 提问者

应该就是这样了?
2018-03-16 回复 有任何疑惑可以回复我~
#4

weixin_慕码人5022369 回复 慕用8327027

nice
2019-11-27 回复 有任何疑惑可以回复我~
查看1条回复

宏定义是直接替换

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

这个程序输出为什么是15啊。。 不懂

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信