4.1.1 关系运算符
关系运算符用于比较两个数据的大小,共有如下6种运算符。
① < :小于。
② <=:小于等于,对应的数学符号是“≤”。
③ > :大于。
④ >=:大于等于,对应的数学符号是“≥”。
⑤==:等于,由连续两个等号组成。
⑥ !=:不等于,对应的数学符号是“≠”。
要注意它们的优先级。前4种关系运算符的优先级相同,后两种也相同,前4种高于后两种。所有的关系运算符的优先级都低于算术运算符,而高于赋值运算符和逗号运算符。
例如:
① c>a+b等价于c>(a+b)
② a==b<c等价于a==(b<c)
③ a=b<=c等价于a=(b<=c)
使用关系运算符,需要注意以下几点。
① 关系运算符是双目运算符,其两边的操作数可以是整型、实型、字符型、指针型及枚举型等。如果参与运算的两个数类型不一致,则先要进行类型转换,再进行关系运算。
例如,'x'>'c' 是两个字符型常量进行比较,实际上比较的是这两个字符型常量的ASCII码值。又如,'a'>70的运算顺序是先将字符 'a' 转换成其ASCII码值97,再与整型常量70进行比较。
② 关系运算符具有左结合性,可以在一个关系表达式中连续使用。例如,关系表达式-1<=x<=1的运算顺序是先判断-1<=x是否成立,结果为0或1,然后再用0或1去判是否小于等于1,结果永远是1。但是,我们知道关系运算的结果是个逻辑值,或为“真”或为“假”,让它去跟一个整型、实型数据去比较大小,并没有实际意义,所以一般不要连续使用关系运算符组成表达式,有的系统甚至把连续出现的关系运算符看做“错误”。
③ 必须注意区别“=”和“==”。前者是赋值运算符,后者是关系运算符中的等于运算符。例如,对于下面的程序:
1 #include<stdio.h> 2 void main() 3 { int a=5,b=3,c; 4 printf("c=%d\n",c==a); 5 printf("a=b?%d\n",a=b); 6 }
程序的运行结果为:
c=0
a=b?3 (1表示二者相等,0表示不等)
结果显然是错误的。这是因为,第4行中,错把“c=a”写成了“c==a”,多写了一个“=”,赋值运算变成了关系运算(程序中变量c未做初始化,编译时显示有“警告”错误);而在第5行中,错把“a==b”写成了“a=b”,遗漏了一个“=”,关系运算变成了赋值运算。