C语言中提供了6种关系运算符:
①<(小于);<=(小于或等于);>(大于);这三个优先级相同,比②高;②>=(大于或等于);==(等于);!=(不等于);这三个优先级相同,比①低。
看几个例子:⑴c>a+b其实就是c>(a+b);a=b>c其实就是a=(b>c)。先记一个简单的优先级比较:算数运算符大于关系运算符大于赋值运算符。
关系表达式。在c的逻辑运算中,以“1”代表“真”,以“0”代表“假”。比如:d=a>b,由于a>b为真,所以赋值后d的值为1。
逻辑运算符。c中有三种,与(&&),或(||),非(!)。在一个逻辑表达式中如果包含多个逻辑运算符,例如:!a&&b||x>y&&c。还是优先级的问题。!(非)→&&(与)→||(或),即“!”为三者中最高的。还有!(非)>算数运算符(+,-,*,/)>关系运算符>&&和||>赋值运算符。
看一个式子:5>3&&8<4-!0
表达式自左向右扫描求解。①先进行5>3为真就是“1”;②再进行!0运算得到“1”;③进行4-!0得到结果为3;④进行8<3结果为“0”;⑤最后进行1&&0,得“0”。
若是在一个判断框中表达1<x<3,直接这样写行不?答案是绝对不可以的,!比如x=2,1<2为真,就是“1”,所以1<3就是真,也是1,就不能表示出范围来。该如何实现这个功能?比如:if(a>1&&a<3)就可以了。
再看一下a&&b&&c和a||b||c,对&&来说,只有a≠0,才能继续进行右面的运算。对||来说,只有a=0,才能继续进行其右面的运算。所以如果有下面的逻辑表达式:
(m=a>b)&&(n=c>d)
当a=1,b=2,c=3,d=4,m和n的原值为1时,由于0=a>b,因此m=0,此时已判定表达式为假了。但是有一点得注意,此时n=1,而不是0。