Booleaanse logische operators - AND, OR, NOT, XOR
De logische Booleaanse operators voeren logische bewerkingen uit met booloperands . De operators omvatten de unaire logische negatie (!
), binaire logische EN (&
), OR (|
) en exclusieve OR (^
) en de binaire voorwaardelijke logische EN (&&
) en OR (||
).
- Unaire
!
(logische negatie) operator. - Binaire
&
operators (logische EN),|
(logische OF)- en^
(logische exclusieve OR)-operators. Deze operators evalueren altijd beide operanden. - Binaire
&&
operatoren (voorwaardelijk logisch EN) en||
(voorwaardelijk logisch OF). Deze operators evalueren de rechteroperand alleen als dit nodig is.
Voor operanden van de integrale numerieke typen voeren de &
en |
^
operators bitwise logische bewerkingen uit. Zie Bitwise- en shiftoperators voor meer informatie.
Logische negatieoperator!
De unaire voorvoegseloperator !
berekent logische negatie van de operand. Dat wil gezegd, produceert true
het , als de operand resulteert false
in , en false
, als de operand resulteert in true
:
bool passed = false;
Console.WriteLine(!passed); // output: True
Console.WriteLine(!true); // output: False
De operator unary postfix !
is de operator null-forgiving.
Logische AND-operator &
De &
operator berekent de logische AND van de operanden. Het resultaat x & y
is true
of beide x
en y
evalueren.true
Anders is false
het resultaat .
De &
operator evalueert altijd beide operanden. Wanneer de linkeroperand evalueert false
, is false
het resultaat van de bewerking ongeacht de waarde van de rechteroperand. Maar zelfs dan wordt de rechteroperand geëvalueerd.
In het volgende voorbeeld is de rechteroperand van de &
operator een methode-aanroep, die wordt uitgevoerd, ongeacht de waarde van de linkeroperand:
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
De voorwaardelijke logische AND-operator &&
berekent ook de logische AND van de operanden, maar evalueert de rechteroperand niet als de linkeroperand resulteert in false
.
Voor operanden van de integrale numerieke typen berekent de &
operator de bitsgewijze logische EN van de operanden. De unaire &
operator is het adres van de operator.
Logische exclusieve OR-operator ^
De ^
operator berekent de logische exclusieve OR, ook wel de logische XOR genoemd, van de operanden. Het resultaat x ^ y
is true
of x
wordt geëvalueerd true
en y
geëvalueerd naar , of x
evalueert false
naar false
en y
evalueert naar true
. Anders is false
het resultaat . Voor de bool
operanden berekent de ^
operator hetzelfde resultaat als de ongelijkheidsoperator!=
.
Console.WriteLine(true ^ true); // output: False
Console.WriteLine(true ^ false); // output: True
Console.WriteLine(false ^ true); // output: True
Console.WriteLine(false ^ false); // output: False
Voor operanden van de integrale numerieke typen berekent de ^
operator de bitwise logische exclusieve OR van de operanden.
Logische OF-operator |
De |
operator berekent de logische OR van de operanden. Het resultaat x | y
is true
of x
y
wordt geëvalueerd true
. Anders is false
het resultaat .
De |
operator evalueert altijd beide operanden. Wanneer de linkeroperand evalueert true
, is true
het resultaat van de bewerking ongeacht de waarde van de rechteroperand. Maar zelfs dan wordt de rechteroperand geëvalueerd.
In het volgende voorbeeld is de rechteroperand van de |
operator een methode-aanroep, die wordt uitgevoerd, ongeacht de waarde van de linkeroperand:
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
De voorwaardelijke logische OF-operator ||
berekent ook de logische OR van de operanden, maar evalueert de rechteroperand niet als de linkeroperand resulteert in true
.
Voor operanden van de integrale numerieke typen berekent de |
operator de bitsgewijze logische OR van de operanden.
Voorwaardelijke logische AND-operator &&
De voorwaardelijke logische AND-operator, ook wel bekend als de logische AND-operator &&
'kortsluiting', berekent de logische AND van de operanden. Het resultaat x && y
is true
of beide x
en y
evalueren.true
Anders is false
het resultaat . Als x
dit wordt false
geëvalueerd, y
wordt deze niet geëvalueerd.
In het volgende voorbeeld is de rechteroperand van de &&
operator een methodeaanroep, die niet wordt uitgevoerd als de linkeroperand het volgende evalueert 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
De logische AND-operator &
berekent ook de logische EN van de operanden, maar evalueert altijd beide operanden.
Voorwaardelijke logische OR-operator ||
De voorwaardelijke logische OR-operator ||
, ook wel bekend als de logische OPERATOR kortsluiting, berekent de logische OR-operator OF van de operanden. Het resultaat x || y
is true
of x
y
wordt geëvalueerd true
. Anders is false
het resultaat . Als x
dit wordt true
geëvalueerd, y
wordt deze niet geëvalueerd.
In het volgende voorbeeld is de rechteroperand van de ||
operator een methodeaanroep, die niet wordt uitgevoerd als de linkeroperand het volgende evalueert 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
De logische OR-operator |
berekent ook de logische OR van de operanden, maar evalueert altijd beide operanden.
Logische booleaanse operatoren
Voor bool?
operanden ondersteunen de &
operators (logische EN) en |
(logische OR) de drie-waardelogica als volgt:
De
&
operator produceerttrue
alleen als beide operanden resulteren intrue
. Als een van beide of evalueertfalse
,x & y
produceertfalse
(zelfs als een andere operand dat evalueertnull
).y
x
Anders isnull
het resultaat vanx & y
.De
|
operator produceertfalse
alleen als beide operanden resulteren infalse
. Als een van beide of evalueerttrue
,x | y
produceerttrue
(zelfs als een andere operand dat evalueertnull
).y
x
Anders isnull
het resultaat vanx | y
.
In de volgende tabel ziet u de semantiek:
x | y | x&y | x|y |
---|---|---|---|
true | true | true | true |
true | false | false | true |
true | Nul | Nul | true |
false | true | false | true |
false | false | false | false |
false | Nul | false | Nul |
Nul | true | Nul | true |
Nul | false | false | Nul |
Nul | Nul | Nul | Nul |
Het gedrag van deze operators verschilt van het typische operatorgedrag met null-waardetypen. Normaal gesproken kan een operator die is gedefinieerd voor operanden van een waardetype ook worden gebruikt met operanden van het overeenkomstige null-waardetype. Een dergelijke operator produceert null
als een van de operanden resulteert in null
. De &
operators |
kunnen echter niet-null produceren, zelfs als een van de operanden resulteert in null
. Zie de sectie Lifted operators van het artikel Nullable value types voor meer informatie over het gedrag van de operator met null-waarden.
U kunt de !
operatoren en ^
operators ook gebruiken met bool?
operanden, zoals in het volgende voorbeeld wordt weergegeven:
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());
De voorwaardelijke logische operators &&
en ||
bieden geen ondersteuning voor bool?
operanden.
Samengestelde toewijzing
Voor een binaire operator op
, een samengestelde toewijzingsexpressie van het formulier
x op= y
is gelijk aan
x = x op y
behalve dat dit x
slechts eenmaal wordt geëvalueerd.
De &
operators |
^
ondersteunen samengestelde toewijzing, zoals in het volgende voorbeeld wordt weergegeven:
bool test = true;
test &= false;
Console.WriteLine(test); // output: False
test |= true;
Console.WriteLine(test); // output: True
test ^= false;
Console.WriteLine(test); // output: True
Notitie
De voorwaardelijke logische operators &&
en ||
bieden geen ondersteuning voor samengestelde toewijzing.
Operatorprioriteit
In de volgende lijst worden logische operators gesorteerd die beginnen met de hoogste prioriteit tot het laagste:
- Logische negatieoperator
!
- Logische AND-operator
&
- Logische exclusieve OR-operator
^
- Logische OF-operator
|
- Voorwaardelijke logische AND-operator
&&
- Voorwaardelijke logische OR-operator
||
Gebruik haakjes, ()
om de volgorde van evaluatie te wijzigen die wordt opgelegd door de prioriteit van de operator:
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
Zie de sectie Operatorprioriteit van het artikel C#-operators voor de volledige lijst met C#-operators die zijn gerangschikt op prioriteitsniveau.
Overbelasting van operatoren
Een door de gebruiker gedefinieerd type kan de !
operators en |
&
^
operators overbelasten. Wanneer een binaire operator overbelast is, wordt de bijbehorende operator voor samengestelde toewijzing ook impliciet overbelast. Een door de gebruiker gedefinieerd type kan een samengestelde toewijzingsoperator niet expliciet overbelasten.
Een door de gebruiker gedefinieerd type kan de voorwaardelijke logische operators &&
en ||
. Als een door de gebruiker gedefinieerd type echter de waar- en onwaaroperatoren en de &
operator |
op een bepaalde manier overbelast, kan de &&
of ||
bewerking worden geëvalueerd voor de operanden van dat type. Zie de sectie Door de gebruiker gedefinieerde logische operators van de C#-taalspecificatie voor meer informatie.
C#-taalspecificatie
Zie de volgende secties van de C#-taalspecificatie voor meer informatie:
- Logische negatieoperator
- Logische operators
- Voorwaardelijke logische operators
- Samengestelde toewijzing