在初学c语言的时候,很多新手弄不懂一些多个变量与运算符的逻辑关系,我牛马哥在这里讲解一下(其实我也很菜,哈哈)。这里我们举例一个例子,如“a>b>c"。下图是一个具体例子。
int main()
{
int a=5,b=4,c=3,d=2;
if(a>b>c)
printf("%d\n",d);
else if((c-1>=d)==1) printf("%d\n",d+1);
else printf("%d\n",d+2);
}
这段代码在控制台的输出结果是多少呢?如果按正常的逻辑思路乍一看,a = 5,b = 4,c = 3,a最大,b次大,c最小,感觉完美符合 if 中的表达式。如果这么想你就中圈套了,在编译器中并没有像数学中的递推关系,而是先去判断a>b这个小表达式。在判断逻辑中只有1和0,真为1,假为0,所以a>b的判断结果再和c做比较。在所示的题目中,a>b(即5>4)为真,所以返回的是1。然后1再和c作比较(即1>c),那1肯定小于3,所以a>b>c为假。同理a>b<c、a<b>c、a<b<c、甚至是更多的变量也是如此。
接下来我要讲的是a=b>c 和a==b>c 之间的区别 (= 被称为赋值运算符,<、>和==被称为关系运算符)
a==b>c,有些人一看说这不是和上面一样吗,先判断a==b,返回1或0与c作比较。如果这么想的话那就错了,这里有一个细节点,就是虽然<、>、==都是关系运算符,但是<、>比==的优先级要高,所以要先判断b>c(即a==(b>c))
a = b>c也是如此,<、>比=的优先级高,所以也要先判断b>c(即a=(b>c))
当然这几个例子也是是众多运算逻辑与运算符使用的一点点,我牛马哥到后续也会随着学习补充更多的内容,谢谢大家。如有错误,请及时指正。
英语专栏:
赋值运算符(Assignment Operator)
关系运算符(Relational Operator)
优先级(precedence)