Delen via


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 (||).

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 truehet , als de operand resulteert falsein , 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 falsehet 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 falsenaar false en y evalueert naar true. Anders is falsehet 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 falsehet 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 falsehet resultaat . Als x dit wordt falsegeë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 falsehet resultaat . Als x dit wordt truegeë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 produceert true alleen als beide operanden resulteren in true. Als een van beide of evalueertfalse, x & y produceert false (zelfs als een andere operand dat evalueertnull).y x Anders is nullhet resultaat van x & y .

  • De | operator produceert false alleen als beide operanden resulteren in false. Als een van beide of evalueerttrue, x | y produceert true (zelfs als een andere operand dat evalueertnull).y x Anders is nullhet resultaat van x | 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:

Zie ook