首页 > 其他 > 详细

7.3

时间:2019-04-10 22:53:39      阅读:113      评论:0      收藏:0      [点我收藏+]

逻辑运算符的优先级比关系运算符优先级低,所以不必在子表达式两侧加圆括号。

iso646.h头文件
因此,C99标准新增了可代替逻辑运算符的拼写,它们被定义在iso646.h头文件中。
如果在程序中包含该头文件,便可用and代替&&、or代替||、not代替!。
例如,可以把下面的代码:
if ( ch != '"' && ch != '\'')
    charcount++;
改写为:
if ( ch != '"' and ch != '\'')
    charcount++;
读者也许很好奇,为何C不直接使用and、or和not? 因为C一直坚持尽量保持较少的关键字。

7.3.2 优先级
    !运算符优先级很高,比乘法运算符还高,与递增运算符优先级相同,之比
圆括号的优先级低。&&运算符优先级比||运算符高,但是两者的优先级都比关系
运算符低,比赋值运算符高。因此,
表达式a > b && b > c || b > d 相当于  ((a > b) && (b > c)) || (b>d)
    求值顺序:
    逻辑表达式的求值顺序是从左往右。一旦发现有使整个表达式为假的因素,立即停止求值。

7.3.3 求值顺序
  C保证逻辑表达式的求值顺序是从左往右。&&和||运算符都是序列点。所以程序在从一个运算对象执行到下一个运算对象之前,所有的副作用都会生效。
C保证一旦发现某个元素让整个表达式无效,便立即停止求值。正是由于有这些规定,才能写出这样结构的代码:
    while ((c = getchar())  != ' ' && c != '\n')
如上代码所示,读取字符直至遇到第一个空格或换行符。第1个子表达式把读取的
值给c,后面的子表达式会用到c的值。如果没有求值顺序的保证,编译器可能在给c赋值之前先对后面的表达式求值。
    这里还有一个例子:
    if (number != 0 && 12/number == 2)
        printf("The number is 5 or 6.\n");
  如果number的值是0,那么第1个子表达式为假,且不再对关系表达式求值。这样
避免了把0作为除数。许多语言都又没这种特性,知道number为0后,仍继续检查后面的条件。
    最后,考虑这个例子:
    while ( x++ < 10 && x + y < 20)
    实际上,&&是一个序列点,这保证了在对&&右侧的表达式求值之前,已经递增    了x。

    求值顺序:
    逻辑表达式的求值顺序是从左往右。一旦发现有使整个表达式为假的因素,立即停止求值。

    无论使用哪种特定的字符编码,islower()函数都能正常运行(不过,一些早期的    编译器没有ctype.h系列)。

7.3

原文:https://www.cnblogs.com/EisNULL/p/10686652.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!