关系运算符
我们可以用关系运算符,判等运算符和逻辑运算符来构建逻辑表达式。在 C 语言中,逻辑表达式的值为 0 或者 1 (0表示false, 1表示true)。
C语言中的关系运算符包括:
- 不等于 (!=)
- 大于 (>)
- 小于 (<)
- 大于或等于 (>=)
- 小于或等于 (<=)
关系运算符都是比较简单的,我们不再赘述。一些小的注意事项细节如下:
- 关系运算符组成的表达式的主要作用是返回一个布尔值,也就是两个操作数比较的结果。
- 关系运算符经常和逻辑运算符一起,组成一个逻辑表达式(或称布尔表达式),结果返回一个布尔值。
注意
表达式 i < j < k
在 C 语言中是合法的,但可能不是你所期望的含义。
i < j < k
等价于 (i < j) < k
,换句话说,该表达式首先检测 i 是否小于 j,然后用比较后产生的结果 (0 或者 1) 和 k 进行比较。
若要测试 j 是否位于 i 和 k 之间,我们应该使用:i < j && j < k
。
C 语⾔的比较运算中, “真”用数字“1”来表示, “假”用数字“0”来表示。
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
== | 相等于 | 4 == 3 | 0 |
!= | 不等于 | 4 != 3 | 1 |
< | 小于 | 4 < 3 | 0 |
> | 大于 | 4 > 3 | 1 |
<= | 小于等于 | 4 <= 3 | 0 |
>= | 大于等于 | 4 >= 1 | 1 |
判等运算符
判等运算符包含: ==, != 。判等运算符的优先级低于关系运算符,并且也是左结合的。
cpp
i < j == j < k 等价于 (i < j) == (j < k)
逻辑运算符
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
! | 非 | !a | 如果a为假,则!a为真 如果a为真,则!a为假。 |
&& | 与 | a && b | 如果a和b都为真,则结果为真,否则为假。 |
` | ` | 或 |
C语言的逻辑运算符非常简单,只有三个:
- 短路与(&&):当且仅当两个操作数都为真(非零)时,结果为真。
- 短路或(||):如果至少一个操作数为真(非零),结果为真。
- 逻辑非(!):一元运算符,只对单个操作数取反。如果操作数为真(非零),结果为假(0);如果操作数为假(0),结果为真(非零)。
所谓的短路指的是:
- 短路与(&&),如果左操作数的值已经是假(零值)了,那么右操作数则不进行计算,直接返回false。
- 短路或(||),如果左操作数的值已经是真(非零值)了,那么右操作数则不进行计算,直接返回true。
短路的好处不仅仅是减少运算次数,提高效率,,比如:
(i != 0) && (j / i > 0)
如果没有短路计算,上面的表达式可能就会出现除零错误,导致程序崩溃。