&&和||。
例如:
若x=10,则 !x的结果为假,值为0;
若a=3,b=0,则a&&b的结果为假,值为0;5&&0||8的值为1。

(1)所有的运算符的优先级的关系是!>算术运算符>关系运算符>&&>||>赋值运算符,对于有疑问的,请一律用括号来明确。
(2)在逻辑表达式的求解中,并不是所有的运算符都被执行,只是在必须执行下一个逻辑运算才能求出表达式解的时候,才去执行下一个运算符。某些情况会发生短路现象,一般是在&&和||的运算中产生。
例如:
当a=5,b=3,c=2,d=1,x=1,y=1时,表达式(x=a<b)&&(y=c<d)的计算规则是:首先计算“a<b”,结果为0,则x=0,这个时候可以确定这个表达式的值为假,因此“y=c<d”不会被执行,所以y的值仍为1而不是0。
又如,a++||b++,因为a++已经为真,所以这个时候整个表达式的值已经可以确定为真,不用去计算b++的值,这个时候b的值没有变化。
(3)数学表达式0<x<10表示x的值大于0小于10,但在C语言中不能用这种逻辑来表达上述关系,因为无论x为何值,上面的表达式都为真。“0<x”的值为0或者1,都是小于10的。要表达数学表达式中的涵义,可以使用如下的方式:x>0&&x<10。这是数学语言和程序设计语言中表达相同意思的一个区别。本章节内容来自希赛全国计算机等级考试用书《计算机等级考试二级C语言考点分析、题解与模拟》。(购书请见 :http://shop.csai.cn/itbook/itbookinfo.asp?lbbh=10032480)
(4)关于实数相等的比较。在计算机中,通常存放在内存中的实数是有误差的,因此不能精确相等,将导致x==y的值总是假。可以通过abs(x-y)<0.0001这种方式来比较,精度0.0001可以由程序员控制。
例8.1.1 如果int a=2,b=3,c=0,下列描述正确的是( )。
A.a>b!=c和a>(b!=c)的执行顺序是一样的 B.!a!=(b!=c)表达式的值为1
C.a||(b=c)执行后b的值为0 D.a&&b>c的结果为假
答案:B
解析:A中>的优先级大于!=,所以执行顺序不一样;C中不用执行b=c,因为a就可以确定这个表达式的值;D中a和b>c都为真,所以整个表达式为真。本章节内容来自希赛全国计算机等级考试用书《计算机等级考试二级C语言考点分析、题解与模拟》。(购书请见 :http://shop.csai.cn/itbook/itbookinfo.asp?lbbh=10032480)
[1] [2]