布林值邏輯運算子 (C# 參考)

下列運算子會使用bool運算元執行邏輯作業:

對於整數數數值型別的運算元, &|^ 運算子會執行位邏輯運算。 如需詳細資訊,請參閱位元與移位運算子

邏輯否定運算子 !

一元前置 ! 運算子會計算其運算元的邏輯否定。 也就是說,它會在運算元評估為 false 時產生 true,並在運算元評估為 true 時產生 false

bool passed = false;
Console.WriteLine(!passed);  // output: True
Console.WriteLine(!true);    // output: False

從 c # 8.0 開始,一元 ! 後置運算子是null 容許運算子

邏輯 AND 運算子&

& 運算子會計算其運算元的邏輯 AND。 若 xy 皆求出 true,那麼 x & y 的結果會是 true。 否則,結果為 false

&運算子會同時評估這兩個運算元,即使左邊的運算元評估為 false ,因此 false 不論右運算元的值為何,運算結果都是如此。

在下列範例中,& 運算子的右邊運算元是方法呼叫;無論左邊運算元的值為何,系統都會執行該呼叫:

bool SecondOperand()
{
    Console.WriteLine("Second operand is evaluated.");
    return true;
}

bool a = false & SecondOperand();
Console.WriteLine(a);
// Output:
// Second operand is evaluated.
// False

bool b = true & SecondOperand();
Console.WriteLine(b);
// Output:
// Second operand is evaluated.
// True

條件邏輯 AND 運算子 && 也會計算其運算元的邏輯 AND,但如果右邊運算元的值評估為 false,系統便不會評估左邊運算元。

對於整數數數值型別的運算元,運算子會 & 計算其運算元的位邏輯 and 。 一元的 & 運算子是 address-of 運算子

邏輯互斥 OR 運算子 ^

^ 運算子會計算其運算元的邏輯互斥 OR,其也稱為邏輯 XOR。 如果 x 評估為 truey 評估為 false,或是 x 評估為 falsey 評估為 true 時,x ^ y 的結果將會為 true。 否則,結果為 false。 也就是說,針對 bool 運算元,^ 運算子的計算結果會與不等比較運算子 != 相同。

Console.WriteLine(true ^ true);    // output: False
Console.WriteLine(true ^ false);   // output: True
Console.WriteLine(false ^ true);   // output: True
Console.WriteLine(false ^ false);  // output: False

對於整數數數值型別的運算元,運算子會 ^ 計算其運算元的位邏輯互斥 OR

邏輯 OR 運算子 |

| 運算子會計算其運算元的邏輯 OR。 若 xy 其中一項的值為 truex | y 的結果會是 true。 否則,結果為 false

|運算子會同時評估這兩個運算元,即使左邊的運算元評估為 true ,因此 true 不論右運算元的值為何,運算結果都是如此。

在下列範例中,| 運算子的右邊運算元是方法呼叫;無論左邊運算元的值為何,系統都會執行該呼叫:

bool SecondOperand()
{
    Console.WriteLine("Second operand is evaluated.");
    return true;
}

bool a = true | SecondOperand();
Console.WriteLine(a);
// Output:
// Second operand is evaluated.
// True

bool b = false | SecondOperand();
Console.WriteLine(b);
// Output:
// Second operand is evaluated.
// True

條件式邏輯 OR 運算子 || 也會計算其運算元的邏輯 OR,但如果左邊運算元的值評估為 true,系統便不會評估右邊運算元。

對於整數數數值型別的運算元,運算子會 | 計算其運算元的位邏輯 or

條件邏輯 AND 運算子&&

條件邏輯 AND 運算子 &&,也稱為「捷徑運算」邏輯 AND 運算子,會計算其運算元的邏輯 AND。 若 xy 皆求出 true,那麼 x && y 的結果會是 true。 否則,結果為 false。 如果 x 評估為 false,則不會評估 y

在下列範例中,&& 運算子的右邊運算元是方法呼叫;如果左邊運算元的值評估為 false,系統便不會執行該呼叫:

bool SecondOperand()
{
    Console.WriteLine("Second operand is evaluated.");
    return true;
}

bool a = false && SecondOperand();
Console.WriteLine(a);
// Output:
// False

bool b = true && SecondOperand();
Console.WriteLine(b);
// Output:
// Second operand is evaluated.
// True

邏輯 and 運算子 & 也會計算其運算元的邏輯 and,但一律會評估這兩個運算元。

條件邏輯 OR 運算子 ||

條件邏輯 OR 運算子 ||,也稱為「捷徑運算」邏輯 OR 運算子,會計算其運算元的邏輯 OR。 若 xy 其中一項的值為 truex || y 的結果會是 true。 否則,結果為 false。 如果 x 評估為 true,則不會評估 y

在下列範例中,|| 運算子的右邊運算元是方法呼叫;如果左邊運算元的值評估為 true,系統便不會執行該呼叫:

bool SecondOperand()
{
    Console.WriteLine("Second operand is evaluated.");
    return true;
}

bool a = true || SecondOperand();
Console.WriteLine(a);
// Output:
// True

bool b = false || SecondOperand();
Console.WriteLine(b);
// Output:
// Second operand is evaluated.
// True

邏輯 or 運算子 | 也會計算其運算元的邏輯 or,但一律會評估這兩個運算元。

可為 Null 的布林值邏輯運算子

針對 bool? 運算元, & (邏輯 AND) | (邏輯 OR) 運算子支援三值邏輯,如下所示:

  • & true 只有當運算子的兩個運算元都評估為時,才會產生 true 。 如果 xy 評估為 falsex & y false 即使另一個運算元評估為) ,也會產生 (null 。 否則,的結果 x & y 會是 null

  • | false 只有當運算子的兩個運算元都評估為時,才會產生 false 。 如果 xy 評估為 truex | y true 即使另一個運算元評估為) ,也會產生 (null 。 否則,的結果 x | y 會是 null

下表顯示該語義:

x y x&y x|y
true true true true
true false false true
true null null true
false true false true
false false false false
false null false null
null true null true
null false false null
null null null null

那些運算子的行為和具有可為 Null 實值類型之一般運算子的行為並不相同。 一般而言,已針對某個實值類型之運算元定義的運算子,也可以搭配相對應可為 Null 實值類型的運算元使用。 null如果它的任何運算元評估為,則會產生這類運算子 null 。 不過, & | 即使其中一個運算元評估為,和運算子也可以產生非 null null 。 如需可為 null 的實數值型別之運算子行為的詳細資訊,請參閱可為 null 的實數值型別一文的「提升運算子」一節。

您也可以使用 !^ 運算子搭配 bool? 運算元,如下列範例所示:

bool? test = null;
Display(!test);         // output: null
Display(test ^ false);  // output: null
Display(test ^ null);   // output: null
Display(true ^ null);   // output: null

void Display(bool? b) => Console.WriteLine(b is null ? "null" : b.Value.ToString());

條件式邏輯運算子 &&|| 不支援 bool? 運算元。

複合指派

若是二元運算子 op,表單的複合指派運算式

x op= y

相當於

x = x op y

但只會評估 x 一次。

&|^ 運算子支援複合指派,如下列範例所示:

bool test = true;
test &= false;
Console.WriteLine(test);  // output: False

test |= true;
Console.WriteLine(test);  // output: True

test ^= false;
Console.WriteLine(test);  // output: True

注意

條件邏輯運算子 &&|| 不支援複合指派。

運算子優先順序

下列清單會依優先順序將邏輯運算子排序 (從最高到最低):

  • 邏輯負運算子 !
  • 邏輯 AND 運算子 &
  • 邏輯互斥 OR 運算子 ^
  • 邏輯 OR 運算子 |
  • 條件邏輯 AND 運算子 &&
  • 條件邏輯 OR 運算子 ||

使用括號 () 來變更由運算子優先順序所強制執行的評估順序:

Console.WriteLine(true | true & false);   // output: True
Console.WriteLine((true | true) & false); // output: False

bool Operand(string name, bool value)
{
    Console.WriteLine($"Operand {name} is evaluated.");
    return value;
}

var byDefaultPrecedence = Operand("A", true) || Operand("B", true) && Operand("C", false);
Console.WriteLine(byDefaultPrecedence);
// Output:
// Operand A is evaluated.
// True

var changedOrder = (Operand("A", true) || Operand("B", true)) && Operand("C", false);
Console.WriteLine(changedOrder);
// Output:
// Operand A is evaluated.
// Operand C is evaluated.
// False

如需依優先順序層級排序之 c # 運算子的完整清單,請參閱c # 運算子一文的運算子優先順序一節。

運算子是否可多載

使用者定義型別可以多!&|^ 運算子。 當二元運算子多載時,對應的複合指派運算子也會隱含地多載。 使用者定義型別無法明確地多載複合指派運算子。

使用者定義類型無法多載條件邏輯運算子 &&||。 不過,若使用者定義類型以某種方式多載 True 和 False 運算子以及 &| 運算子,就可以針對該類型的運算元個別評估 &&|| 作業。 如需詳細資訊,請參閱 C# 語言規格使用者定義條件式邏輯運算子一節。

C# 語言規格

如需詳細資訊,請參閱 C# 語言規格的下列幾節:

另請參閱