• C# 条件与&&与条件或||的使用总结


    CSDN说明:

    条件“或”运算符 (||) 执行 bool 操作数的逻辑“或”运算,但仅在必要时才计算第二个操作数。

    件“与”运算符 (&&) 执行其 bool 操作数的逻辑“与”运算,但仅在必要时才计算第二个操作数

    同时我们还要了解到  || 和 && 都是左结合性的逻辑运算符,所以看下面的例子

    class Program
        {
            static void Main(string[] args)
            {
                int a = 9;
                int b = 10;
                int c = 11;
                int d = 12;
                if (d>b || c > b && a>b)
                {
                    Console.WriteLine("true");
                }
                Console.ReadKey();
            }
        }

    所以在判断到d>b为true时,后面的部分c > b && a>b就不会再运算,进入条件语句里面


    更正:

    上面的结果原因是由于 && 的优先级高于 || ,所以上面的条件相当于 d>b || (c>b && a>b) 。在看一个例子

    1 if ( a > b && c > b || d > b) 
    2             {
    3                 Console.WriteLine("true");
    4             }

    上面这个结果也是ture,以为上面的条件相当于 (a>b && c>b) || d>b。

    上面我们已经知道了&& 的优先级高于 || ,那么下面我们通过两位一种方式看看 && 和 || 的短路特性(就是开篇CSDN说明:中说的特性)及其的结合性。

    看下面的代码

     1 class Program
     2     {
     3         static int trueTimes = 1;
     4         static int falseTimes = 1;
     5         static bool GetTrue()
     6         {
     7             Console.WriteLine("Execute GetTrue():" + trueTimes++);
     8             return true;
     9         }
    10 
    11         static bool GetFalse()
    12         {
    13             Console.WriteLine("Execute GetFalse():" + falseTimes++);
    14             return false;
    15         }
    16 
    17         static void Main(string[] args)
    18         {
    19             Console.WriteLine(GetTrue() && GetTrue() || GetFalse());
    20             Console.ReadKey();
    21             
    22         }
    23 
    24         
    25     }

    输出结果为

    Execute GetTrue():1
    Execute GetTrue():2
    True

    分析:由于&& 优先级比较高,所以条件相当于(GetTrue() && GetTrue() )|| GetFalse() ,所以执行第一个GetTrue()时,还会执行第二个GetTrue()才能确定真个表达式为真,其实对于 || 后面的方面,就会被短路,不被执行,因为前面的结果已经可以证明整个表达式为True。

    我们再换个逻辑表达式

    1 static void Main(string[] args)
    2         {
    3             Console.WriteLine(GetFalse() && GetTrue() || GetFalse());
    4             Console.ReadKey();
    5             
    6         }

    输出结果为

    Execute GetFalse():1
    Execute GetFalse():2
    False

    分析:由于&& 优先级比较高,所以条件相当于(GetTrue() && GetTrue() )|| GetFalse() ,所以执行第一个GetFalse()时,(GetTrue() && GetTrue() )就一定为假,所以后面的GetTrue()不会执行,被短路,这个里面我们也可以看出&& 和 || 是从左到右的结合方式,这个时候我们必须继续执行||后面的逻辑,才能确认整个表达式是真是假,所以GetFalse会被执行。

    上面是我这边的更正,如果有错误或疏忽之处,望不惜赐教!

  • 相关阅读:
    LeetCode 560 和为 K 的子数组
    idea使用技巧汇总
    【Kafka核心技术与实战】导读
    如何永久关闭 Mybase8 登录弹窗(license提醒)
    分析Edk2启动流程
    OEE计算
    线段树分治学习笔记
    linux 安装PostgreSql 12[转]
    Linux中redis数据备份和迁移【转】
    DataGrid控件自动显示行号
  • 原文地址:https://www.cnblogs.com/liuww/p/4658176.html
Copyright © 2020-2023  润新知