C

C 知识量:16 - 74 - 317

7.2 逻辑运算符><

逻辑运算符- 7.2.1 -

C有3种逻辑运算符:

逻辑运算符含义
&&
||
!

逻辑运算符可以将多个用于判断条件的表达式组合起来一起求值,以构成更复杂、功能更强大的判断条件。示例:

#include <stdio.h>

int main(void) {
    int x = 26;
    if (x > 0 && x <= 10) {
        printf("x>0 and x<=10");
    }
    if (x > 10 && x <= 20) {
        printf("x>10 and x<=20");
    }
    if (x > 20 && x <= 30) {
        printf("x>20 and x<=30");
    } else {
        printf("x>30");
    }
    system("pause");
    return 0;
}

运行结果为:

x>20 and x<=30

通过以上示例可以看出,逻辑运算符两侧的条件必须都为真,整个表达式才为真。逻辑运算符的优先级比关系运算符低,所以不必在子表达式两侧加圆括号。

逻辑运算符的真假判断举例:

  • 对于a&&b:a和b都为真时,a&&b才为真。

  • 对于a||b:a或b有一个为真时,a||b就为真。

  • 对于!a:a为真时,!a为假;a为假时,!a为真。

备选拼写- 7.2.2 -

C是在美国用标准的美式键盘开发的语言。但是在世界其他地方,不是所有键盘都有和美式键盘一样的符号。因此,在C99标准中,新增了可代替逻辑运算符的拼写,它们被定义在ios646.h头文件中。如果在程序中包含ios646.h头文件,就可以用and代替&&,用or代替||,用not代替!。之所以C不直接使用and、or和not,是因为C一直坚持尽量保持较少的关键字。

优先级- 7.2.3 -

逻辑运算符的优先级情况如下:

  • !运算符的优先级很高,比乘法运算符还高,与递增运算符相同,只比圆括号的优先级低。

  • &&运算符的优先级比||运算符高,但比关系运算符低,比赋值运算符高。

  • ||运算符的优先级比&&运算符低,比赋值运算符高。

例如:表达式 a>b&&b>c||b>d 相当于 ((a>b)&&(b>c))||(b>d)。

求值顺序- 7.2.4 -

C通常不保证先对复杂表达式中哪部分求值,但是,对于逻辑运算符却例外,C保证逻辑表达式的求值顺序是从左往右。&&和||运算符都是序列点,所以程序在从一个运算对象执行到下一个运算对象之前,所有副作用都会生效,而且,C保证一旦发现某个元素让整个表达式无效,便立即停止求值。

示例1:

if (number != 0 && number > 10) {;}

对于number来说,如果其值为0,后面的表达式不再求值。

示例2:

while (x++ < 10 && x + y < 20) {;}

&&是一个序列点,这保证了在对&&右侧表达式求值前,已经递增了x。