1.13 逻辑运算符和表达式
1、逻辑运算符:!(非),&&,(逻辑与),||(逻辑或)
2、逻辑运算真值表
在C语言中,运算量:0为假,非0为真;运算结果:0为假,1为真。
3、举例
(1)a <= x && x <= b
从左向右结合,先进行a <= x,再计算x <= b,最后进行&&
(2)a > b && x > y
先进行a > b,再计算 x > y,最后进行&&
(3)a == b || x== y
先进行a == b,再计算x== y,最后进行||
(4)!a || a >b
先进行!a,再计算a >b,最后进行||
4、若a = 4,b = 5
(1)!a:因为a的值为真,所以!a为假,因此值为0
(2)a && b:a,b均为真,所以a && b为真,值为1
(3)a || b:a为真,所以a || b为真,值为1
(4)!a || b:a为真,所以!a 为假,但是b的值为5,为真,所以 0 || 5为1
(5)4 && 0 || 2:先计算4 && 0,值为0;再计算0 || 2,为真,值为1
(6)‘c’ && ‘d’:‘c’和‘d’转换为ASCII码值,均为非0 数值,所以 &&两侧均为真,最终计算值为1
5、短路特性
逻辑表达式求解时,并非所有的逻辑运算符都执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。
a && b:只有在a为真时,才判别b的值
a || b:只有在a为假时,才判别b的值
举例:a = 1;b = 2;c = 4; d = 3;m = 1; n = 0
(1)(m = a > b) && (n = c > b)
a > b为假,所以值为0,将0赋值给m,因为运算量为0,所以表达式为假,则0 && (n = c > b),前者为假,后者就不需要判别,此时n = 0
(2)(n = c > b) && (m = a > b)
c > b为真,所以值为1,将1赋值给m,因为运算量为1,所以表达式为真,则1 && (m = a > b),前者为真,后者仍需判别,所以m = 0
(3)(m = a > b) || (n = c > b)
a > b为假,所以值为0,将0赋值给m,因为运算量为0,所以表达式为假,则0 || (n = c > b),前者为假,后者仍需判别,所以n = 1
(4)(n = c > b) || (m = a > b)
c > b为真,所以值为1,将1赋值给m,因为运算量为1,所以表达式为真,则1 || (m = a > b),前者为真,后者就不需要判别,此时m = 1