逻辑运算符:
运算符 | 含义 | 优先级 |
! | 逻辑非 | 高 |
&& | 逻辑与 | 中 |
|| | 逻辑或 | 低 |
举例:
!a:如果 a 为真,!a 为假;如果 a 为 假,!a 为真
a && b:a 和 b 同时为真,结果才为真;a 和 b 有一个为假,结果就为假
a || b:a 和 b 有一个为真或 a 和 b 全为真,结果就为真;a 和 b 全为假,结果才为假
逻辑表达式:
用逻辑运算符将两边的变量、数据或表达式连接起来,称之为逻辑表达式
#include <stdio.h> int main() { printf("%d ", 3 > 1 && 1 < 2); printf("%d ", 3 < 1 && 1 < 2); printf("%d ", !(1)); printf("%d ", !0 + 1 < 1 || !(3 + 1)); printf("%d ", 'a' - 'b' && 'c'); return 0; }
运行结果
!0 + 1 < 1 || !(3 + 1):!0 等于 1,1 + 1 小于 1,结果为0;3 + 1 等于 4,!(4) 为 0,所以结果为 0
'a' - 'b' && 'c':'a' - 'b' 的值为 -1,不等于 0,为真;'c' 的值也不为 0,所以结果为 1
短路求值:
短路求值又称最小化求值,是一种逻辑运算符的求值策略
#include <stdio.h> int main() { int a = 3, b = 3; (a = 4) && (b = 5); printf("a 的值为 %d ,b 的值为 %d ", a, b); (a = 1) || (b = 5); printf("a 的值为 %d, b 的值为 %d ", a, b); return 0; }
运行结果
#include <stdio.h> int main() { int a = 3, b = 3; (a = 0) && (b = 5); printf("a 的值为 %d ,b 的值为 %d ", a, b); (a = 1) || (b = 5); printf("a 的值为 %d, b 的值为 %d ", a, b); return 0; }
运行结果
逻辑与运算进行短路求值时:
先对 && 左边的表达式进行运算,如果左边运算的结果不等于 0 的话,将对 && 右边的表达式进行运算
如果 && 左边运算的结果等于 0 的话,就不对右边的表达式进行运算
逻辑或运算进行短路求值时:
无论 || 左边的表达式的值是否为 0,都会对 || 右边的表达式进行求值