using System;
namespace 短路运算符
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("*************************** true && true ***************************");
if (left_true() && right_true())
Console.WriteLine("left_true() && right_true() is true");
else
Console.WriteLine("left_true() && right_true() is false");
Console.WriteLine();
Console.WriteLine("*************************** true && false ***************************");
if (left_true() && right_false())
Console.WriteLine("left_true() && right_false() is true");
else
Console.WriteLine("left_true() && right_false() is false");
Console.WriteLine();
Console.WriteLine("*************************** false && true ***************************");
if (left_false() && right_true())
Console.WriteLine("left_false() && right_true() is true");
else
Console.WriteLine("left_false() && right_true() is false");
Console.WriteLine();
Console.WriteLine("*************************** false && false ***************************");
if (left_false() && right_false())
Console.WriteLine("left_false() && right_false() is true");
else
Console.WriteLine("left_false() && right_false() is false");
Console.WriteLine();
Console.WriteLine("*************************** true & true ***************************");
if (left_true() & right_true())
Console.WriteLine("left_true() & right_true() is true");
else
Console.WriteLine("left_true() & right_true() is false");
Console.WriteLine();
Console.WriteLine("*************************** true & false ***************************");
if (left_true() & right_false())
Console.WriteLine("left_true() & right_false() is true");
else
Console.WriteLine("left_true() & right_false() is false");
Console.WriteLine();
Console.WriteLine("*************************** false & true ***************************");
if (left_false() & right_true())
Console.WriteLine("left_false() & right_true() is true");
else
Console.WriteLine("left_false() & right_true() is false");
Console.WriteLine();
Console.WriteLine("*************************** false & false ***************************");
if (left_false() & right_false())
Console.WriteLine("left_false() & right_false() is true");
else
Console.WriteLine("left_false() & right_false() is false");
Console.WriteLine();
Console.WriteLine("*************************** true || true ***************************");
if (left_true() || right_true())
Console.WriteLine("left_true() || right_true() is true");
else
Console.WriteLine("left_true() || right_true() is false");
Console.WriteLine();
Console.WriteLine("*************************** true || false ***************************");
if (left_true() || right_false())
Console.WriteLine("left_true() || right_false() is true");
else
Console.WriteLine("left_true() || right_false() is false");
Console.WriteLine();
Console.WriteLine("*************************** false || true ***************************");
if (left_false() || right_true())
Console.WriteLine("left_false() || right_true() is true");
else
Console.WriteLine("left_false() || right_true() is false");
Console.WriteLine();
Console.WriteLine("*************************** false || false ***************************");
if (left_false() || right_false())
Console.WriteLine("left_false() || right_false() is ture");
else
Console.WriteLine("left_false() || right_false() is false");
Console.WriteLine();
Console.WriteLine("*************************** true | true ***************************");
if (left_true() | right_true())
Console.WriteLine("left_true() | right_true() is true");
else
Console.WriteLine("left_true() | right_true() is false");
Console.WriteLine();
Console.WriteLine("*************************** true | false ***************************");
if (left_true() | right_false())
Console.WriteLine("left_true() | right_false() is true");
else
Console.WriteLine("left_true() | right_false() is false");
Console.WriteLine();
Console.WriteLine("*************************** false | true ***************************");
if (left_false() | right_true())
Console.WriteLine("left_false() | right_true() is true");
else
Console.WriteLine("left_false() | right_true() is false");
Console.WriteLine();
Console.WriteLine("*************************** false | false ***************************");
if (left_false() | right_false())
Console.WriteLine("left_false() | right_false() is true");
else
Console.WriteLine("left_false() | right_false() is false");
Console.ReadLine();
}
private static bool left_true()
{
Console.WriteLine("this is left_true()");
return true;
}
private static bool left_false()
{
Console.WriteLine("this is left_false()");
return false;
}
private static bool right_true()
{
Console.WriteLine("this is right_true()");
return true;
}
private static bool right_false()
{
Console.WriteLine("this is right_false()");
return false;
}
}
}
运行结果:
由此可见:
&& 和 || 有短路的作用;& 和 | 没有短路的作用。
注:
当 && 的左值为false时,将不计算右值(短路);
当 || 的左值为true时,将不计算右值(短路)。