Megosztás a következőn keresztül:


Logikai operátorok – AND, OR, NOT, XOR

A logikai logikai operátorok logikai műveleteket hajtanak végre bool operandusokkal. Az operátorok közé tartozik a nem kötelező logikai tagadás (!), a bináris logikai ÉS (), VAGY (&|) és a kizárólagos VAGY (^), valamint a bináris feltételes logikai ÉS (&&) és AZ (||).

Az integrál numerikus típusok operandusai esetében a , |és ^ az &operátorok bitenkénti logikai műveleteket hajtanak végre. További információ: Bitwise és shift operátorok.

Logikai negation operátor !

A unary prefix ! operátor az operandus logikai eltagolását számítja ki. Ez azt jelzi, hogy az operandus falsea következő értéket adjatrue, és falseha az operandus a következőt trueértékeli ki:

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

A unary postfix ! operátor a null-elbocsátó operátor.

Logikai ÉS operátor >

Az & operátor kiszámítja a logikai ÉS operandusait. Ennek eredményex & y, ha mindkettőx, és y a kiértékelés eredménye.truetrue Ellenkező esetben az eredmény a következő false: .

Az & operátor mindig mindkét operandust kiértékeli. Amikor a bal oldali operandus kiértékeli, falsea művelet eredménye a jobb oldali operandus értékétől függetlenül lesz false . A jobb oldali operandus azonban még akkor is kiértékelésre kerül.

Az alábbi példában az operátor jobb oldali operandusa & egy metódushívás, amelyet a bal oldali operandus értékétől függetlenül hajtunk végre:

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

A feltételes logikai ÉS operátor && a logikai ÉS operandusait is kiszámítja, de nem értékeli ki a jobb oldali operandust, ha a bal oldali operandus kiértékeli a következőt false: .

Az integrál numerikus típusok operandusai esetében az operátor kiszámítja & a bitenkénti logikai ÉS operandusait. Az unary & operátor az operátor címe.

Logikai kizárólagos VAGY operátor ^

Az ^ operátor kiszámítja az operandusok logikai kizárólagos vagy más néven logikai XOR-ját. Az eredmény x ^ y az, true ha x kiértékeli azt true , majd y falsekiértékeli azt , vagy x kiértékeli false és y kiértékeli.true Ellenkező esetben az eredmény a következő false: . Vagyis az bool operandusok esetében az ^ operátor ugyanazt az eredményt számítja ki, mint az egyenlőtlenségi operátor !=.

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

Az integrál numerikus típusok operandusai esetében az operátor kiszámítja ^ az operandusok bitenkénti logikai kizárólagosságát vagy operandusait.

Logikai VAGY operátor |

Az | operátor kiszámítja a logikai VAGY annak operandusait. Az eredmény x | y az, true ha vagy x a y kiértékelése true. Ellenkező esetben az eredmény a következő false: .

Az | operátor mindig mindkét operandust kiértékeli. Amikor a bal oldali operandus kiértékeli, truea művelet eredménye a jobb oldali operandus értékétől függetlenül lesz true . A jobb oldali operandus azonban még akkor is kiértékelésre kerül.

Az alábbi példában az operátor jobb oldali operandusa | egy metódushívás, amelyet a bal oldali operandus értékétől függetlenül hajtunk végre:

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

A feltételes logikai VAGY operátor || a logikai VAGY operandusait is kiszámítja, de nem értékeli ki a jobb oldali operandust, ha a bal oldali operandus kiértékeli a következőt true: .

Az integrál numerikus típusok operandusai esetében az operátor kiszámítja | a bitenkénti logikai VAGY operandusokat.

Feltételes logikai ÉS operátor >

A feltételes logikai AND operátor &&, más néven "rövidzárolás" logikai ÉS operátor, kiszámítja a logikai ÉS operandusait. Ennek eredményex && y, ha mindkettőx, és y a kiértékelés eredménye.truetrue Ellenkező esetben az eredmény a következő false: . Ha x a kiértékelés eredménye false, y akkor a kiértékelés nem történik meg.

Az alábbi példában az operátor jobb oldali operandusa && egy metódushívás, amely nem történik meg, ha a bal oldali operandus a következőt falseértékeli ki:

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

A logikai ÉS operátor & a logikai ÉS operandusait is kiszámítja, de mindig mindkét operandust kiértékeli.

Feltételes logikai VAGY operátor ||

A feltételes logikai VAGY operátor ||, más néven "rövidzárolás" logikai VAGY operátor, kiszámítja a logikai VAGY operandusait. Az eredmény x || y az, true ha vagy x a y kiértékelése true. Ellenkező esetben az eredmény a következő false: . Ha x a kiértékelés eredménye true, y akkor a kiértékelés nem történik meg.

Az alábbi példában az operátor jobb oldali operandusa || egy metódushívás, amely nem történik meg, ha a bal oldali operandus a következőt trueértékeli ki:

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

A logikai VAGY operátor | szintén kiszámítja az operandusok logikai vagy operandusait, de mindig mindkét operandust kiértékeli.

Null értékű logikai logikai operátorok

Az operandusok esetében bool? a & (logikai ÉS) és | (logikai VAGY) operátorok az alábbiak szerint támogatják a háromértékű logikát:

  • Az & operátor csak akkor termel, true ha mindkét operandusa kiértékeli a következőt true: . Ha vagy x vagy y kiértékeli azt false, x & y akkor is létrejön false (még akkor is, ha egy másik operandus kiértékeli).null Ellenkező esetben az eredmény x & y az .null

  • Az | operátor csak akkor termel, false ha mindkét operandusa kiértékeli a következőt false: . Ha vagy x vagy y kiértékeli azt true, x | y akkor is létrejön true (még akkor is, ha egy másik operandus kiértékeli).null Ellenkező esetben az eredmény x | y az .null

Az alábbi táblázat bemutatja ezt a szemantikát:

x y x&yy 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

Ezeknek az operátoroknak a viselkedése eltér a null értékű operátorok tipikus viselkedésétől. Az érték típusú operandusokhoz definiált operátorok általában a megfelelő null értékű operandusokkal is használhatók. Egy ilyen operátor akkor termel, null ha bármelyik operandusa kiértékeli .null Az és | az & operátorok azonban akkor is létrehozhatnak nem null értéket, ha az operandusok egyike kiértékeli a következőtnull: . A null értékű értéktípusok operátori viselkedésével kapcsolatos további információkért lásd a Null értékű értéktípusok cikk Emelt operátorok szakaszát.

Operandusokkal bool? is használhatja az operátorokat és az ! ^ operátorokat, ahogy az alábbi példa is mutatja:

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

A feltételes logikai operátorok && || nem támogatják bool? az operandusokat.

Összetett hozzárendelés

Bináris operátor opesetén az űrlap összetett hozzárendelési kifejezése

x op= y

egyenértékű a

x = x op y

kivéve, hogy csak x egyszer van kiértékelve.

A &, |és ^ operátorok támogatják az összetett hozzárendelést, ahogy az alábbi példa is mutatja:

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

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

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

Feljegyzés

A feltételes logikai operátorok && , és || nem támogatják az összetett hozzárendelést.

Operátorok műveleti sorrendje

Az alábbi lista a logikai operátorokat a legmagasabb prioritástól a legalacsonyabbig rendeli:

  • Logikai negation operátor !
  • Logikai ÉS operátor &
  • Logikai kizárólagos VAGY operátor ^
  • Logikai VAGY operátor |
  • Feltételes logikai ÉS operátor &&
  • Feltételes logikai VAGY operátor ||

Zárójelek ()használatával módosítsa az operátorok elsőbbsége által előírt kiértékelési sorrendet:

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

A C#-operátorok elsőbbségi szint szerint rendezett teljes listájáért tekintse meg a C# operátorok cikkének Operátorok elsőbbsége című szakaszát.

Operátorok túlterhelése

A felhasználó által definiált típus túlterhelheti a !, &, |és ^ operátorokat. Ha egy bináris operátor túlterhelt, a megfelelő összetett hozzárendelési operátor is implicit módon túlterhelt. A felhasználó által definiált típus nem tudja explicit módon túlterhelni az összetett hozzárendelési operátorokat.

A felhasználó által definiált típus nem tudja túlterhelni a feltételes logikai operátorokat && és ||a . Ha azonban egy felhasználó által definiált típus túlterheli a valódi és a hamis operátorokat , illetve az & operátort | egy bizonyos módon, akkor az && adott típusú operandusok esetében a művelet vagy || a művelet kiértékelhető. További információ: A C# nyelv specifikációjának felhasználó által definiált feltételes logikai operátorok szakasza.

C# nyelvspecifikáció

További információt a C# nyelvspecifikációjának alábbi szakaszaiban talál:

Lásd még