
4.1 关系运算符、关系表达式与逻辑运算符、逻辑表达式
4.1.1 关系运算符和关系表达式
1.关系运算符
所谓关系运算,又称比较运算,将两个值进行比较,判断比较结果是否符合给定条件。表2.5给出了C语言运算符分类。目前已经讲解过的运算符有算术运算符、赋值运算符、逗号运算符、求占字节数运算符(sizeof)、强制类型转换运算符。表2.6给出了不同种类运算符的优先级。
现在看一看关系运算符这个子分类,C语言提供了6种关系运算符,将这6种关系运算符从表2.6中提取出来以便看得更清晰,如表4.1所示。
表4.1 6种关系运算符含义及优先级

对于关系运算符的优先级问题,有几点内容需要强调:
(1)表4.1中,前四个关系运算符优先级相同,后两个关系运算符优先级也相同,前四个关系运算符的优先级高于后两个的。
(2)关系运算符的优先级低于算术运算符。

图4.1 赋值、关系、算术运算符之间的优先级
(3)关系运算符的优先级高于赋值运算符。
(4)关系运算符中的等于“==”是两个等号,一定不能写成一个等号“=”,否则就变成赋值运算符了。
因为在编写程序的过程中,经常需要用到算术运算符、关系运算符、赋值运算符之间的混合运算,所以,再把这三个运算符之间的优先级明确一下,如图4.1所示。
既然强调了运算符的优先级问题,看看如下这些表达式的范例:

2.关系表达式
用关系运算符将两个表达式连接起来的式子就叫关系表达式。如下两个表达式都是关系表达式:

关系表达式的值是一个逻辑值,也就是“真”或者“假”。例如,5==3的值为“假”(再次提醒:==千万不能写成=),5>=0的值为“真”。
在C语言中,“真”用true表示,也可以用1表示;“假”用false表示,也可以用0表示,可以认为true就等于1,false就等于0。所以,可以认为,关系表达式的结果值是0或者1,也可以认为关系表达式的结果值是true或者false。看看如下范例:

再看一例:

再看一看这个分析:如果a值为3,b值为2,c值为1,那么:
