C语言逻辑运算符及其用法
关系运算符只是测试左右两个值之间的关系(把它们相互比较),逻辑运算符(logical operator)则是把多个关系表达式组合起来,判断最终的结果是“真”还是“假”。因而,有时候逻辑运算符又称为复合关系运算符(compound relation operator)。C语言提供了 3 种逻辑运算符,如表 1 所示。
对于逻辑运算符优先级的问题,逻辑非
图 1 展示了一个复杂条件表达式的运算顺序。

图 1:复杂条件表达式的运算顺序
图 2 分别展示了逻辑与、逻辑或、逻辑非的饼图及运算规则。


图 2:逻辑与、逻辑或、逻辑非的饼图及运算规则
表 2 和表 3 分别展示了逻辑运算符混合运算的运算规则和示例。
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
| 运算符 | 含义 | 说明 | 示例 |
|---|---|---|---|
| && | 逻辑与 | 运算符两边的表达式都成立(真),返回 1;只要有一个不成立(假),返回 0 |
(2==3)&&(3==3) 的值为 0 (2<3)&&(3==3) 的值为 1 |
| || | 逻辑或 | 运算符两边的表达式只要有一个成立,返回 1;只有两边的表达式都不成立时,返回 0 |
(2==3)||(3==3) 的值为 1 (2<1)||(2==3) 的值为 0 |
| ! | 逻辑非 | 运算符后边的表达式成立(真),返回 0,否则返回 1 |
!(2==3) 的值为 1 !(2<3) 的值为 0 |
对于逻辑运算符优先级的问题,逻辑非
!的优先级最高,不仅优先于关系运算符,甚至优先于算术运算符,其次是逻辑与&&,逻辑或||优先级最低,而逻辑与&&和逻辑或||的优先级低于关系运算符。当一个判断条件表达式中同时出现关系运算符、逻辑运算符、算术运算符时,其运算优先关系如下:( ) → 函数、! → *、/、% → +、- → <、>、!=、<=、>= → &&、||
图 1 展示了一个复杂条件表达式的运算顺序。

图 1:复杂条件表达式的运算顺序
图 2 分别展示了逻辑与、逻辑或、逻辑非的饼图及运算规则。


图 2:逻辑与、逻辑或、逻辑非的饼图及运算规则
表 2 和表 3 分别展示了逻辑运算符混合运算的运算规则和示例。
| p | q | !q | p&&!q | p||!q | !(p&&q) | !(p||q) |
|---|---|---|---|---|---|---|
| 0 | 0 | 1 | 0 | 1 | 1 | 1 |
| 0 | 1 | 0 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 1 | 1 | 1 | 0 |
| 1 | 1 | 0 | 0 | 1 | 0 | 0 |
| p | q | m | p&&q | p||q | p&&q||m |
|---|---|---|---|---|---|
| 5+2>10 | 0 | 0 | 0 | 0 | 0 |
| 5+2==10 | 1 | 0 | 0 | 1 | 0 |
| 5*2==10 | 0 | 1 | 0 | 1 | 1 |
| 5+2<10 | 1 | 1 | 1 | 1 | 1 |
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。