C语言提供了一组逻辑运算符:或(||)、且(&&)、非(!),分别对应于命题逻辑中的 OR、AND、NOT运算。
- 逻辑运算符:或 ||。在命题逻辑中,当P=1或Q=1时,P||Q等于1。
- 逻辑运算符:且 &&。在命题逻辑中,当P=1且Q=1时,P&&Q才等于1。
- 逻辑运算符:非 !。在命题逻辑中,当P等于0时,!P等于1,反之亦然。
逻辑运算认为所有非零的参数都表示为TRUE,而参数0表示FALSE,它们返回1(TRUE)或0(FALSE)。
逻辑运算符&&和||与对应的位级运算&和|之间一个重要区别是,如果对第一个参数求值就能确定表达式的结果,那么逻辑运算符就不会对第二个参数求值。
- 对于 x && y:当逻辑与左边x为FALSE时,则不再进行右边y的判断,结果为FALSE。因此,若a=0,表达式 a && 5/a 将不会造成除零。
- 对于 x || y:当逻辑或左边x为FALSE,继续右边y的判断,如果为TRUE,则逻辑或结果为TRUE;当逻辑或左边x为TRUE,则不再进行右边y的判断,即逻辑或结果为TRUE。
逻辑运算符和其它运算符优先级从低到高依次为:
逻辑非 ! > 算术运算符 > 关系运算符 > 逻辑与 &&、逻辑或 || > 赋值=
更详细的运算符优先级可参考之前发布的文章:《C运算符的优先级和结合性》