《C程序设计语言(第2版新版)典藏版》 —2.6 关系运算符与逻辑运算符
2.6 关系运算符与逻辑运算符
关系运算符包括下列几个运算符:
它们具有相同的优先级。优先级仅次于它们的是相等性运算符:
关系运算符的优先级比算术运算符的低。因此,表达式i < lim-1等价于i < ( lim-1 )。
逻辑运算符&&与||有一些较为特殊的属性。由&&与||连接的表达式按从左到右的顺序进行求值,并且,在知道结果值为真或假后立即停止计算。绝大多数C语言程序运用了这些属性。例如,下列是在功能上与第1章的输入函数getline中的循环语句等价的循环语句:
在读入一个新字符之前必须先检查数组s中是否还有空间存放这个字符,因此必须首先测试条件i<lim-1。如果这一测试失败,就没有必要继续读入下一字符。
类似地,如果在调用getchar函数之前就测试c是否为EOF,结果也是不正确的,因此,函数的调用与赋值都必须在对c中的字符进行测试之前进行。
运算符&&的优先级比||的优先级高,但两者都比关系运算符和相等性运算符的优先级低。因此,表达式
就不需要另外加圆括号了。但是,由于运算符!=的优先级高于赋值运算符的优先级,因此,在表达式
中,就需要使用圆括号,这样才能达到预期的目的:先把函数返回值赋值给c,然后再将c与'\n'进行比较。
根据定义,在关系表达式或逻辑表达式中,如果关系为真,则表达式的结果值为数值1;如果为假,则结果值为数值0。
逻辑非运算符!的作用是将非0操作数转换为0,将操作数0转换为1。该运算符通常用于下列类似的结构中:
一般不采用下列形式:
当然,很难评判上述两种形式哪种更好。类似于!valid的用法读起来更直观一些(“如果不是有效的”),但对于一些更复杂的结构可能会难于理解。
练习2-2 在不使用运算符&&或||的条件下编写一个与上面的for循环语句等价的循环语句。
- 点赞
- 收藏
- 关注作者
评论(0)