C#中&與&&的區別
以前都沒怎么注意兩者的區別(我甚至都不知道“&”),因為它們都是“與”運算符。我昨天看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
fn1 called
fn2 called
result is False
short-circuit AND:
fn1 called
result is False
BTW
(&) 也可作為一元運算符,返回操作數的地址
PS.
(|) 與 (||) 運算符也是一樣的道理



浙公網安備 33010602011771號