C程序设计语言
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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”,遗漏了一个“=”,关系运算变成了赋值运算。