逻辑运算符是C语言的基本运算符之一,和关系运算符、算术运算符一起被包含在包括C语言在内的大多数程序设计语言中。
逻辑运算符包括逻辑非(!
),逻辑或(&&
)和逻辑(||
),其中!
是一元运算符,&&
和||
为二元运算符。
符号 | 含义 |
---|---|
! | 逻辑非 |
&& | 逻辑与 |
|| | 逻辑或 |
逻辑运算符所产生的结果为0或1,其操作包括以下几种:
- 如果表达式的值为0,则表达式的逻辑非的值为1。如果表达式的值不为0,则表达式的逻辑非为0.
- 如果表达式1和表达式2的值都是非零值,则表达式1和表达式2的逻辑与为1,否则为0.
- 如果表达式1和表达式2的值都是0,则表达式1和表达式2的逻辑或为0,否则为1.
逻辑运算符&&
和||
都采用的是“短路”计算,即如果计算出左侧的操作数就可以决定逻辑运算符的结果,则跳过右侧表达式的计算。因此注意在右侧表达式修改变量值的情况,因为它有可能不被执行。
逻辑运算符!
和一元正负号运算符的优先级相同,且是右结合的,而&&
和||
的优先级低于关系运算符,是左结合的。
/***************************************
* logical_operator.c *
* *
* C语言中的逻辑运算符 *
***************************************/
#include <stdio.h>
int main()
{
int i = 10;
int j = 0;
int k = -2;
printf("i=%d, j =%d, k =%d\n", i, j, k);
printf("!i = %d\n", !i);
printf("!j = %d\n\n", !j);
printf("i&&k = %d\n", i && k);
printf("i&&j = %d\n", i && j);
printf("j&&i = %d\n", j && i);
printf("j&&j = %d\n\n", j && j);
printf("i||k = %d\n", i || k);
printf("j||i = %d\n", j || i);
printf("i||j = %d\n", i || j);
printf("j||j = %d\n\n", j || j);
/*短路*/
{
int m = 0;
(i != 0) && (m++);
printf("m = %d\n", m);
}
{
int m = 0;
(i == 0) && (m++);
printf("m = %d\n\n", m);
}
printf("i>j&&j<k = %d\n", i>j&&j<k);
printf("(i>j)&&(j<k) = %d\n", (i>j)&&(j<k));
return 0;
}
由于在两个复合语句中,逻辑运算符的计算结果没有被使用,因此在使用gcc
编辑器开启-Wall
选项编译时报计算出的值没有被使用的警告。
参考文献
- K.N. King 著,吕秀峰 译. C语言程序设计-现代方法. 人民邮电出版社