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会被执行。

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

原文地址:https://www.cnblogs.com/liuww/p/4658176.html