从头学C(17)关系运算符与逻辑运算符

0

第二章 类型、运算符与表达式 >> 2.6 关系运算符与逻辑运算符

关系运算符包括:

>      >=     <     <=      ==      !=

其中 == 和 != 的优先级比其他四个关系运算符要低一级。

逻辑运算符包括:

&&        ||       !

其中&&(逻辑与运算符)和||(逻辑或运算符)比较特殊,由这两个运算符连接的表达式按照从左到右的顺序求值,在知道结果值为真或为假后,立即停止计算。比如:

int i, j;

i = 表达式A  && 表达式B && 表达式C;
j = 表达式D  || 表达式E || 表达式F;

第三行先计算表达式A,如果为真,才计算表达式B;如果为假,则直接返回0,就不会去计算表达式B和C。因为表达式A为假就可以判断这整个表达式的结果了。

第四行先计算表达式D,如果为假,才计算表达式E;如果为真,则直接返回1,同样不会去计算表达式E和F。同样也是因为表达式D为真就可以判断这个整个表达式的结果。

&&运算符的优先级比||的优先级要高,但它们都比关系运算符的优先级要低,所以下面的表达式就不需要额外的加上圆括号了(当然加上也不会有错):

i<lim-1 && (c = getchar()) != '\n' && c != EOF

但!=运算符的优先级比赋值运算符=要高,所以 c=getchar()的圆括号不能略去。

根据定义,在关系表达式或逻辑表达式中:

  • 如果关系为真,则表达式的结果为数值1;
  • 如果关系为假,则表达式的结果为数值0;

运算符!(逻辑非运算符)的作用顾名思义,就是取”非”值,将操作数0转换为1,而将非0的操作数转换为0。该运算符经常用于条件判断中,比如

if(!valid)

而一般不使用下面这种形式:

if(valid == 0)

可能也是考虑到前者表达的字面意思更直观一点。

Leave A Reply