逻辑运算符

一个有趣的问题

下面的程序运行后,i,j,k的值分别是多少?

int i = 0;
int j = 0;
int k = 0;
++i || ++j && ++k;

结果为1,0,0

程序中的短路:

  • || 从左向右开始计算
    • 当遇到真的条件时停止计算,整个表达式为真
    • 所有条件为假时表达式才为假
  • && 从左到右开始计算
    • 当遇到假的条件时停止计算,整个表达式为假
    • 所有条件真时表达式才为真

逻辑表达式中,&& 比 || 具有更高的优先级

逻辑非的使用

例子1:逻辑非的使用

#include<stdio.h>

int main()
{
    printf("%d\n",!0);
    printf("%d\n",!10);
    printf("%d\n",!110);
    printf("%d\n",!-110);
    return 0;
}

小结

  • 程序中的逻辑表达式遵从短路规则
  • 在&&与||混合运算时
    • 整个表达式被看做||表达式
    • 从左到右先计算&&表达式
    • 最后计算||表达式
  • 逻辑非!运算符只认0,碰见0返回1,否则都返回0
posted @ 2018-06-07 15:50  烟云123  阅读(162)  评论(0编辑  收藏  举报