布林值邏輯運算子- C# 參考
文章推薦指數: 80 %
^ 運算子會計算其運算元的邏輯互斥OR,其也稱為邏輯XOR。
如果 x 評估為 true 且 y 評估為 false ,或是 x 評估為 false 且 ...
跳到主要內容
已不再支援此瀏覽器。
請升級至MicrosoftEdge,以利用最新功能、安全性更新和技術支援。
下載MicrosoftEdge
其他資訊
目錄
結束焦點模式
閱讀英文
儲存
目錄
閱讀英文
儲存
Twitter
LinkedIn
Facebook
電子郵件
目錄
布林值邏輯運算子(C#參考)
發行項
06/23/2022
5位參與者
本文內容
下列運算子會使用bool運算元執行邏輯作業:
一元(邏輯否定)運算子。
二元(邏輯AND)、(邏輯OR),以及(邏輯專有或)運算子。
那些運算子一律會評估兩個運算元。
二元(條件式邏輯AND)和(條件式邏輯OR)運算子。
那些運算子只會在必要時才評估右邊的運算元。
針對整數數數值型別的運算元,、|和^運算子會執行位邏輯運算。
如需詳細資訊,請參閱位元與移位運算子。
邏輯否定運算子!
一元前置!運算子會計算其運算元的邏輯否定。
也就是說,它會在運算元評估為false時產生true,並在運算元評估為true時產生false:
boolpassed=false;
Console.WriteLine(!passed);//output:True
Console.WriteLine(!true);//output:False
從c#8.0開始,一元!後置運算子是!。
邏輯AND運算子&
&運算子會計算其運算元的邏輯AND。
若x及y皆求出true,那麼x&y的結果會是true。
否則,結果為false。
&即使左運算元評估為false,運算子仍會false評估這兩個運算元,如此一來,無論右邊運算元的值為何,都會產生運算結果。
在下列範例中,&運算子的右邊運算元是方法呼叫;無論左邊運算元的值為何,系統都會執行該呼叫:
boolSecondOperand()
{
Console.WriteLine("Secondoperandisevaluated.");
returntrue;
}
boola=false&SecondOperand();
Console.WriteLine(a);
//Output:
//Secondoperandisevaluated.
//False
boolb=true&SecondOperand();
Console.WriteLine(b);
//Output:
//Secondoperandisevaluated.
//True
條件邏輯AND運算子也會計算其運算元的邏輯AND,但如果右邊運算元的值評估為false,系統便不會評估左邊運算元。
針對整數數數值型別的運算元,運算子會計算其運算元的位邏輯and。
一元的&運算子是&。
邏輯互斥OR運算子^
^運算子會計算其運算元的邏輯互斥OR,其也稱為邏輯XOR。
如果x評估為true且y評估為false,或是x評估為false且y評估為true時,x^y的結果將會為true。
否則,結果為false。
也就是說,針對bool運算元,^運算子會計算與不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。
若x或y其中一項的值為true,x|y的結果會是true。
否則,結果為false。
|即使左運算元評估為true,運算子仍會true評估這兩個運算元,如此一來,無論右邊運算元的值為何,都會產生運算結果。
在下列範例中,|運算子的右邊運算元是方法呼叫;無論左邊運算元的值為何,系統都會執行該呼叫:
boolSecondOperand()
{
Console.WriteLine("Secondoperandisevaluated.");
returntrue;
}
boola=true|SecondOperand();
Console.WriteLine(a);
//Output:
//Secondoperandisevaluated.
//True
boolb=false|SecondOperand();
Console.WriteLine(b);
//Output:
//Secondoperandisevaluated.
//True
條件式邏輯OR運算子也會計算其運算元的邏輯OR,但如果左邊運算元的值評估為true,系統便不會評估右邊運算元。
針對整數數數值型別的運算元,運算子會計算其運算元的位邏輯or。
條件邏輯AND運算子&&
條件邏輯AND運算子&&,也稱為「捷徑運算」邏輯AND運算子,會計算其運算元的邏輯AND。
若x及y皆求出true,那麼x&&y的結果會是true。
否則,結果為false。
如果x評估為false,則不會評估y。
在下列範例中,&&運算子的右邊運算元是方法呼叫;如果左邊運算元的值評估為false,系統便不會執行該呼叫:
boolSecondOperand()
{
Console.WriteLine("Secondoperandisevaluated.");
returntrue;
}
boola=false&&SecondOperand();
Console.WriteLine(a);
//Output:
//False
boolb=true&&SecondOperand();
Console.WriteLine(b);
//Output:
//Secondoperandisevaluated.
//True
邏輯and運算子也會計算其運算元的邏輯and,但一律會評估這兩個運算元。
條件邏輯OR運算子||
條件邏輯OR運算子||,也稱為「捷徑運算」邏輯OR運算子,會計算其運算元的邏輯OR。
若x或y其中一項的值為true,x||y的結果會是true。
否則,結果為false。
如果x評估為true,則不會評估y。
在下列範例中,||運算子的右邊運算元是方法呼叫;如果左邊運算元的值評估為true,系統便不會執行該呼叫:
boolSecondOperand()
{
Console.WriteLine("Secondoperandisevaluated.");
returntrue;
}
boola=true||SecondOperand();
Console.WriteLine(a);
//Output:
//True
boolb=false||SecondOperand();
Console.WriteLine(b);
//Output:
//Secondoperandisevaluated.
//True
邏輯or運算子也會計算其運算元的邏輯or,但一律會評估這兩個運算元。
可為Null的布林值邏輯運算子
針對bool?運算元,bool?和&運算子支援三值邏輯,如下所示:
只有當運算子的運算元評估為true時,&才會產生true運算子。
x如果或y評估為false,即使另一個運算元評估為null),x&y也會產生false(。
否則,的結果x&y為null。
只有當運算子的運算元評估為false時,|才會產生false運算子。
x如果或y評估為true,即使另一個運算元評估為null),x|y也會產生true(。
否則,的結果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
voidDisplay(bool?b)=>Console.WriteLine(bisnull?"null":b.Value.ToString());
條件式邏輯運算子&&,但||不支援bool?運算元。
複合指派
若是二元運算子op,表單的複合指派運算式
xop=y
相當於
x=xopy
但只會評估x一次。
&、|和^運算子支援複合指派,如下列範例所示:
booltest=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
boolOperand(stringname,boolvalue)
{
Console.WriteLine($"Operand{name}isevaluated.");
returnvalue;
}
varbyDefaultPrecedence=Operand("A",true)||Operand("B",true)&&Operand("C",false);
Console.WriteLine(byDefaultPrecedence);
//Output:
//OperandAisevaluated.
//True
varchangedOrder=(Operand("A",true)||Operand("B",true))&&Operand("C",false);
Console.WriteLine(changedOrder);
//Output:
//OperandAisevaluated.
//OperandCisevaluated.
//False
如需依優先順序層級排序的c#運算子完整清單,請參閱c#運算子文章的運算子優先順序一節。
運算子是否可多載
使用者定義型別可以多載、&|、和^運算子。
當二元運算子多載時,對應的複合指派運算子也會隱含地多載。
使用者定義型別無法明確地多載複合指派運算子。
使用者定義類型無法多載條件邏輯運算子&&和||。
不過,若使用者定義類型以某種方式多載True和False運算子以及或|運算子,就可以針對該類型的運算元個別評估&&或||作業。
如需詳細資訊,請參閱C#語言規格的使用者定義條件式邏輯運算子一節。
C#語言規格
如需詳細資訊,請參閱C#語言規格的下列幾節:
邏輯否定運算子
邏輯運算子
條件邏輯運算子
複合指派
另請參閱
C#參考資料
C#運算子與運算式
位元與移位運算子
本文內容
延伸文章資訊
- 1[C#] 在Javascript 與C# 中簡單使用XOR 加解密 - 當麻許的超技八
[C#] 在Javascript 與C# 中簡單使用XOR 加解密. 最近因為一些需求,Javascript 那邊無法使用其他的library ,網路上查了一下,最後使一個算是折衷的 ...
- 2位元運算子(二進制) - iT 邦幫忙
... 與運算子(+、-、*、/、>、<....等)-來用C#算數學吧!(下). C#與ASP.Net入門-我要成為工程師!! 系列第9 篇 ... XOr(互斥), 當A跟B都是或都是1,結果...
- 3BitArray.Xor(BitArray) 方法(System.Collections) | Microsoft Docs
C# 複製. public System.Collections.BitArray Xor (System.Collections.BitArray value); ... 下列程式碼範例示範如...
- 4[邏輯運算] 利用互斥進行兩數互換
II. 程式. 以往的做法會宣告一個temp 變數來當互換的暫存如果利用XOR 寫法就變的非常簡單,只要三行就完成互換的動作 ( ^ 為C#語法中的XOR 運算子).
- 5【c#】XOR運運算元 - 程式人生
請用通俗的英語解釋一下什麼是xor( ^ )運算子,它在下面的程式碼中是做什麼的: public int GetHashCode(Box bx) { int hCode = bx.Height ...