首页 百科知识 逻辑运算中各运算符的优先顺序

逻辑运算中各运算符的优先顺序

时间:2024-10-17 百科知识 版权反馈
【摘要】:这是逻辑运算符的一个重要性质。所以,运算结束时,表达式的值为1。也就是说,对于运算符&&,只要其左运算分量为0,则整个逻辑表达式的值就确定为0,从而不计算其右运算分量;只有其左运算分量不等于0时,才继续进行右面的运算。

2.4.4 逻辑运算符和逻辑表达式

C语言中逻辑运算符有3个,它们是:

! 逻辑非;&& 逻辑与;|| 逻辑或。

其中,“!”是单目运算符,只有一个运算分量,如“!a”。而“&&”和“||”是双目运算符,要求有两个运算分量,如(i〉 j)&&(b〈c)。

逻辑运算符的作用如表2.4.1所示。

表2.4.1 逻辑运算符的作用

img114

由逻辑运算符和运算分量构成的表达式称为逻辑表达式。表2.4.1中的i和j代表一般可求值的表达式(运算分量),其类型可以是整型、浮点型、字符型和指针型,如78、'r'+45、3.14*y、a〉b和c!=0等。

逻辑表达式的值只有“真”和“假”两个值,“真”用1表示,“假”用0表示。

(1)逻辑非运算符!

作用在单个运算分量上,其结果是运算分量逻辑值的“反”。例如,“!i”表示i的反,即:若i为真(即i的值非0),则“!i”为假;反之,若i为假(即i的值为0),则“!i”为真。

在表示逻辑结果时,不管其具体数值是多少,只要不等于0,逻辑值就为真,用1表示;仅当其值等于0时,逻辑值才为假,用0表示。因此,当x等于34时,其逻辑值为1,而“!x”的值是0;而“!(x−34)”的值是1。这样,“!!x”的值就不等于x(除非x等于1)。因为x的值是34,“!x”是0,而“!!x”等价于“!(!x)”,结果为1,不是34。

(2)逻辑与运算符&&

作用在前后两个运算分量上,其结果是:仅当两个运算分量同时为真时,结果才为真;否则,只要其中有一个为假,结果就是假。

例如,50&&60,结果是1;又如,“a=68;b=90;”那么a〉=b&&(a+5)〉=(b−3)仍为0,因为a〉=b不成立,其逻辑值为0。

(3)逻辑或运算符 ||

作用在前后两个运算分量上,其结果是:只要其中有一个运算分量为真,结果就为真;仅当二者同时为假时,结果才为假。

这与逻辑与运算符&&的作用有明显的差别。例如,“a=68;b=90;”那么:

  a〉b||a!=b

的结果为真。因为a〉b的值虽然为0,但a!=b的值是1,0||1的值仍为1。

在一个逻辑表达式中如果包含多个逻辑运算符,应按这三个逻辑运算符的优先级和结合性进行运算。这三个逻辑运算符的优先级是:!的优先级高于&&的优先级,&&的优先级又高于||的优先级;运算是按照自左至右的顺序进行,即其结合性为左结合性。

另外,!与增量运算符++、−−属于同一级,高于算术运算符的优先级;而&&和||低于算术运算符和关系运算符的优先级,但高于赋值运算符的优先级。所以:

  a〉b||a!=b

等价于(a〉b)||(a!=b)。但是

  (a=35)||a!=b

与 a=35||a!=b

是不同的。前一个表达式是逻辑或表达式,即:先把35赋给a,然后执行a||a! =b。而后一个表达式是赋值表达式,即:先执行35||a!=b,再把结果赋给a。由于35是非0值,所以35||a!=b的结果是1,最后a的值也是1。

需要注意的是:在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只有在必须执行下一个逻辑运算符才能求解出表达式的解时,才执行该运算符。也就是说,只要得到了结果,求值的过程就停止,我们把这样的计算称为短路求值。这是逻辑运算符的一个重要性质。

例如:假设a=1,b=0,c=−2,则求下列表达式的值:

(1)a &&b &&c

这种情况下,只有a为真(非0)时,才需要判别b的值,只有a和b都为真的情况下才需要判别c的值。只要a为假,就不必判别b和c(此时整个表达式的值已确定为假)。如果a为真,b为假,不判别c。

运算时,先做a &&b,结果为0,运算终止。运算结束,表达式的值为0,a、b、c的值保持原值不变。

(2)(a++) || ++b &&−−c

运算时,先做a++,由于是后缀形式,先取出a的值1做逻辑或||,然后a的值再加1,因为是做逻辑或||,所以表达式的结果为1,运算终止。所以,运算结束时,表达式的值为1。a的值为2,b、c的值保持原值不变。

也就是说,对于运算符&&,只要其左运算分量为0,则整个逻辑表达式的值就确定为0,从而不计算其右运算分量;只有其左运算分量不等于0时,才继续进行右面的运算。

对于运算符||,只要其左运算分量为1,则整个逻辑表达式的值就确定为1,从而不再计算其右运算分量;只有其左运算分量不等于1时,才继续进行右面的运算。

熟练掌握C语言的关系运算符和逻辑运算符,可以巧妙地用一个逻辑表达式来表示一个复杂的条件。

例如:判断给定的某一年year是否闰年。

什么是闰年呢?闰年的满足条件是:能被4整除而不能被100整除,或者能被400整除。

可用一个逻辑表达式来表示:

  (year%4==0 &&year%100!=0)|| year%400==0

如果上述表达式值为真(即为1),则year为闰年;否则为非闰年。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈