当前位置: C语言 -- 基础 -- 表达式

表达式(十五)

十一、逻辑运算符

C语言逻辑运算符(logical operators)包括:逻辑与运算符(&&)、逻辑或运算符(||)、逻辑非运算符()。逻辑运算符的操作数应为标量类型(scalar type),运算结果为int类型。

逻辑运算符表达式的语法格式分别如下所示:

expression && expression

expression || expression

! expression

其中expression为标量类型表达式。


1、逻辑与运算符

逻辑与运算符(&&)的运算规则:

&&=

&&=

&&=

&&=


如果逻辑与运算符(&&)的两个操作数都不等于0,运算结果为1;否则运算结果为0

int a = 1;
int b = 0;

a&&a;   //表达式a&&a的值为1。
a&&b;   //表达式a&&b的值为0。
b&&b;   //表达式b&&b的值为0。

逻辑与运算符(&&)是从左到右评估的,即先评估左操作数,再评估右操作数;在左操作数的评估和右操作数的评估之间存在一个序列点(sequence point)。如果左操作数等于0,右操作数不会被评估。

int a = 0;
int b = 0;

a && b++;
printf("%d\n", b);  //输出0。

2、逻辑或运算符

逻辑或运算符(||)的运算规则:

||=

||=

||=

||=


如果逻辑或运算符(||)的两个操作数中任一操作数不等于0,运算结果为1;否则运算结果为0

int a = 1;
int b = 0;

a||a;   //表达式a||a的值为1。
a||b;   //表达式a||b的值为1。
b||b;   //表达式b||b的值为0。

逻辑或运算符(||)是从左到右评估的,即先评估左操作数,再评估右操作数;在左操作数的评估和右操作数的评估之间存在一个序列点(sequence point)。如果左操作数不等于0,右操作数不会被评估。

int a = 1;
int b = 0;

a || b++;
printf("%d\n", b);  //输出0。

3、逻辑非运算符

逻辑非运算符(!)的运算规则:

! =

! =


如果逻辑非运算符(!)的操作数不等于0,运算结果为0;如果逻辑非运算符(!)的操作数等于0,运算结果为1。表达式!E等价于表达式(0==E)

printf("%d\n", !0);   //输出1。
printf("%d\n", !1);   //输出0。