表达式(十五)
十一、逻辑运算符
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。