C 语言支持的所有关系逻辑运算符。假设变量 A 的值为 1,变量 B 的值为 0,则:
| 运算符 | 描述 | 实例 | 
|---|---|---|
| && | 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 | (A && B) 为假。 | 
| || | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 | (A || B) 为真。 | 
| ! | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 | !(A && B) 为真。 | 
#include <stdio.h>
int main()
{
    int i = 0;
    int j = 0;
    int k = 0;
    ++i || ++j && ++k;
    printf("%d\n", i);
    printf("%d\n", j);
    printf("%d\n", k);
    return 0;
}
运行结果:

||从左向右开始计算:
&&从左向右开始计算:
逻辑表达式中,&&比||具有更高的优先级

在&&和||混合运算时,整个表达式被看作||表达式,编译器从左向右开始计算&&表达式,当某个&&表达式的值为真时,停止计算,整个表达式的值为真。
#include <stdio.h>
int g = 0;
int f()
{
    printf("In f()...\n");
    return g++;
}
int main()
{
    if( g || f() && f() )
    {
        printf("In if statement: %d\n", g);
    }
    printf("In main(): %d\n", g);
    return 0;
}
输出结果:

C语言中的逻辑非(!)只认得0,只知道见了0就返回1,因此当其碰见的值不是0时,其结果为0.
#include <stdio.h>
int main()
{
    printf("%d\n", !0);
    printf("%d\n", !1);
    printf("%d\n", !100);
    printf("%d\n", !-1000);
    return 0;
}
输出结果:

本文链接:http://so.lmcjl.com/news/23797/