逻辑运算符及其优先级,C语⾔逻辑运算符及其优先级详解
C 语⾔提供了以下三种逻辑运算符。
⼀元:!(逻辑⾮)。
⼆元:&&(逻辑与)、||(逻辑或)。
以上三种逻辑运算符中,逻辑⾮ ! 的优先级最⾼,逻辑与 && 次之,逻辑或  ||  优先级最低。即算术、逻辑、赋值运算符的优先级顺序为:
逻辑⾮ ! >算术 > 逻辑与 &&、逻辑或 || > 赋值=
逻辑表达式的值为逻辑值,即布尔型(bool),该类型为 C99 新增的,⼀些编译器可能还不⽀持该类型。
逻辑值分为逻辑真值和逻辑假值。⼀般情况下,在判断时,仅有零值被判断为逻辑假值(false),⼀切⾮零值均可被判断为逻辑真值(true);在存储和表⽰时,通常,使⽤ 1 表⽰逻辑真值,0表⽰逻辑假值。
逻辑与 && 运算符的运算规则:只有两个操作数均为逻辑真时,结果才为真。其余情况,结果均为假。
逻辑或 || 运算符的运算规则:只有两个操作数均为逻辑假时,结果才为假。其余情况,结果均为真。
例如,设有定义语句
int a=3,b=5;
则有:
!a:由于 a ⾮零,为真,!a 为假,其值为 0。
运算符优先级图片a||b:由于 a 和 b 均⾮零,均为真,故逻辑或的结果为真,其值为 1。
a&&b:由于 a 和 b 均⾮零,均为真,故逻辑与的结果为真,其值为 1。
!a||b&&2:由于逻辑⾮ ! 优先级最⾼,⾸先与 a 结合,⽽ && 优先级⾼于 ||,相当于(!a)||(b&&2),即 0||1 为真,其值为 1。
逻辑与 &&、逻辑或 || 均有“短路”特性:
逻辑与&&“短路”:当逻辑与&&的左操作数为逻辑假时,就⾜以判断该逻辑运算的结果为假了,故右操作数就不再被执⾏。
逻辑或||“短路”:当逻辑或||的左操作数为逻辑真时,就⾜以判断该逻辑运算的结果为真了,故右操作数就不再被执⾏。
例如:
int a=1,b=2,c;
c=a||++b;
printf("a=%d,b=%d,c=%d\n",a,b,c);
由于 a 为⾮零值,即为真,⽽当逻辑或 || 的左操作数为真时,就⾜以判断该逻辑操作的结果为真。故发⽣“短路”,即右操作数 ++b 不被执⾏。输出结果为:a=1,b=2,c=1。
分析以下程序,输出其运⾏结果。
#include<stdio.h>
int main(void)
{
int a=0,b=2,c;
c=!a||++b&&a--;
printf("a=%d,b=%d,c=%d\n",a,b,c);
return 0;
}
代码分析:
混合表达式 c=!a||++b&&a-- 中含有的运算符有逻辑⾮!、逻辑或 ||、逻辑与 &&、算术前缀 ++、算术后缀 --、赋值号 = 等6个运算符。逻辑运算符、算术运算符、赋值运算符的优先级的关系为:
逻辑⾮! > 算术 > 逻辑与&&、逻辑或 || > 赋值 =
由于该表达式中赋值运算符优先级最低,故最后赋值。
根据优先级的⾼低,表达式 !a||++b&&a-- 等价于 (!a)||((++b)&&(a--)),⽽逻辑或 || 的左操作数 !a 为真,此时⾜以判断该表达式的值为真。故发⽣“短路”,即 ||的整个右操作数 ((++b)&&(a--)) 不再被执⾏。
运⾏结果为:
a=0,b=2,c=1

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。