zoukankan      html  css  js  c++  java
  • 第15课 逻辑运算符分析

    1. 有趣问题:逻辑运算符&&,||和!真的很简单吗?

    【实例分析】初探逻辑运算符

    #include <stdio.h>
    
    int main()
    {
        int i = 0;
        int j = 0;
        int k = 0;
        
        //等价于(true && ++i) ||(++j && ++k)可见整个表达式为或运算,从左向右进行
        //或运算,先计算或左边的(true && ++i)结果为true,根据“或”的短路规则,不再
        //进行右边的(++j && ++k)。
        ++i || ++j && ++k;
    
        printf("%d
    ", i); //i为1
        printf("%d
    ", j); //0
        printf("%d
    ", k); /0
        
        return 0;
    }

    2. 程序中的短路

      (1)||左向右开始计算

      ①当遇到为的条件时停止运算,整个表达式为

      ②所有条件为假时表达式才为假

      (2)&&左向右开始计算

      ①当遇到为的条件时停止运算,整个表达式为

      ②所有条件为真时表达式才为真

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

     

      ▲ 在&&和||混合运算时,整个表达式被看作||表达式,编译器从左向右开始计算&&表达式,当某个&&表达式的值为真时,停止计算,整个表达式的值为真。

    【实例分析】程序中的短路规则

    #include <stdio.h>
    
    int g = 0;
    
    int f()
    {
        printf("In f()...
    ");
    
        return g++;
    }
    
    int main()
    {
        //等价(true && g) || (f() && f())
        //或的左边为false,继续计算右边的(f() && ())
        //所以先输出f中的printf语句,由于第1个f返加0
        //而或右边的表达式是“与”运算,所以短路,即右
        //则表达式返回false,整个表达式为false。下列的
        //if语句中的printf不被执行。
        if( g || f() && f() ) 
        {
            printf("In if statement: %d
    ", g);
        }
        
        printf("In main(): %d
    ", g);
        
        return 0;
    }
    
    //输出结果
    //In f()...
    //In main(): 1

    4. “!”究竟是神马

    【实例分析】逻辑非运算符的使用

    #include <stdio.h>
    
    int main()
    {
        printf("%d
    ", !0);    //1
        printf("%d
    ", !1);    //0
        printf("%d
    ", !100);  //0
        printf("%d
    ", !-1000);//0
        
        return 0;
    }

      ▲C语言中的逻辑非“!”只认得0,只知道见了0就返回1。当碰见其它值时,返回0。

    5. 小结

    (1)程序中的逻辑表达式遵循短路规则

    (2)在&&与||混合运算时

      ①整个表达式被看作||表达式;②从左向右计算&&表达式;③最后计算||表达式

    (3)逻辑非!运算符只认得0。碰见0返回1,否则统统返回0。(只有0才表示假,其余均为真

  • 相关阅读:
    SSH、SCP和SFTP 解析(转)
    SQL Server数据库partition by 与ROW_NUMBER()函数使用详解 (转载)
    Git版本控制与工作流详解(转)
    IQueryable,IEnumberable,.AsEnumerable() 和 .AsQueryable() (转载)
    ASP.NET 中Http处理流程与 HttpModule,HttpHandler学习之初步认知
    xml Node 是否存在
    MVC-前台调用后台action 传递upload file 参数问题
    ResXResourceWriter 与ResourceWriter
    "= ="与 equals 的区别 摘录
    jpg文件格式分析
  • 原文地址:https://www.cnblogs.com/5iedu/p/5323727.html
Copyright © 2011-2022 走看看