以前都沒怎麼注意兩者的區別(我甚至都不知道“&”),因為它們都是“與”運算子。我昨天看C#高編第三版的時候,才注意到這點,查了下MSDN,把區別貼出來,時時提醒自己。
二元運算子 (&) 為整型和 bool 類型預定義了二進位 & 運算子。對於整型,& 計算運算元的按位“與”。對於 bool 運算元,& 計算運算元的邏輯“與”;也就是說,若且唯若兩個運算元均為 true 時,其結果才為 true。條件“與”運算子 (&&) 執行布爾運算元的邏輯“與”運算,但如有必要,只計算第二個運算元。它與二元運算子 (&)很像,不同的是,如果 x 為 false,則不計算 y(因為不論 y 為何值,與操作的結果都為 false)。這被稱作為“短路”計算。
下面的例子最能說明問題
// cs_operator_logical_and.cs
using System;
class Test
{
static bool fn1()
{
Console.WriteLine("fn1 called");
return false;
}
static bool fn2()
{
Console.WriteLine("fn2 called");
return true;
}
public static void Main()
{
Console.WriteLine("regular AND:");
Console.WriteLine("result is {0}", fn1() & fn2());
Console.WriteLine("short-circuit AND:");
Console.WriteLine("result is {0}", fn1() && fn2());
}
}
輸出:
regular AND:
fn1 called
fn2 called
result is False
short-circuit AND:
fn1 called
result is False
BTW
(&) 也可作為一元運算子,返回運算元的地址
PS.
(|) 與 (||) 運算子也是一樣的道理