加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中的决策 – ? :运算符示例

发布时间:2020-12-16 10:14:14 所属栏目:百科 来源:网络整理
导读:我知道运算符是如何工作的,但我不明白下面代码中的第二种情况如何给出1作为结果. #define MIN(a,b) ab ? a:b int x = MIN(1,2); //case 1,output is 1int x = MIN(1,1+1); // case 2 编译器不应该将此情况(情况2)看作“是1 1 1?”,我认为应该是“1 1?不是
我知道运算符是如何工作的,但我不明白下面代码中的第二种情况如何给出1作为结果.

#define MIN(a,b) a<b ? a:b  
int x = MIN(1,2);  //case 1,output is 1
int x = MIN(1,1+1); // case 2

编译器不应该将此情况(情况2)看作“是1< 1 1?”,我认为应该是“1< 1?不是不是”,表达式3被执行,我们得到:“b”= 1 1 = 2.这是因为上面的宏中a和b周围没有括号,或者可能是因为我遵循自己的规则并感到迷茫?请帮忙.... 另外,你如何解释这个案例:

int x = MIN(1,2) + 1;  //should we consider the "1" on the right?

解决方法

你的第二个案子

MIN(1,1+1);

扩展到

1<1+1 ? 1:1+1;

由于1 <1被评估为真,因此上述表达式为1. 该声明

int x = MIN(1,2) + 1;

扩张后的结果

int x = 1<2 ? 1:2 + 1;

运算符的优先级高于三元运算符:?,所以下面的表达式实际上相当于

1<2 ? 1:(2 + 1);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读