Logiczna operatory logiczne (C# odwołanie)Boolean logical operators (C# reference)

Następujące operatory wykonują operacje logiczne z argumentami operacji bool :The following operators perform logical operations with bool operands:

W przypadku operandów całkowitych typów liczbowychoperatory &, |i ^ wykonują bitowe operacje logiczne.For operands of the integral numeric types, the &, |, and ^ operators perform bitwise logical operations. Aby uzyskać więcej informacji, zobacz Operatory bitowe i przesunięcia.For more information, see Bitwise and shift operators.

Operator logiczny negacjiLogical negation operator !

Operator jednoargumentowy ! oblicza logiczne Negacja operandu.The unary prefix ! operator computes logical negation of its operand. Oznacza to, że generuje true, jeśli operand zostanie obliczony do falsei false, jeśli operand zostanie obliczony do true:That is, it produces true, if the operand evaluates to false, and false, if the operand evaluates to true:

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

Począwszy od C# 8,0, operator jednoargumentowy!jest operatorem o wartości null-łagodniejszej.Beginning with C# 8.0, the unary postfix ! operator is the null-forgiving operator.

Operatory logiczne i &Logical AND operator &

Operator & oblicza wartość logiczną i jej operandów.The & operator computes the logical AND of its operands. Wynik x & y jest true, jeśli oba x i y są oceniane do true.The result of x & y is true if both x and y evaluate to true. W przeciwnym razie wynik jest false.Otherwise, the result is false.

Operator & oblicza oba operandy, nawet jeśli argument operacji po lewej stronie szacuje się na false, dzięki czemu wynik operacji jest false niezależnie od wartości operandu po prawej stronie.The & operator evaluates both operands even if the left-hand operand evaluates to false, so that the operation result is false regardless of the value of the right-hand operand.

W poniższym przykładzie argument operacji z prawej strony operatora & jest wywołaniem metody, które jest wykonywane niezależnie od wartości operandu po lewej stronie:In the following example, the right-hand operand of the & operator is a method call, which is performed regardless of the value of the left-hand operand:

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

Warunkowe operatory logiczne i && oblicza również wartości logiczne i jego operandy, ale nie oblicza wartości operandu po prawej stronie, jeśli argument operacji po lewej stronie ma wartość false.The conditional logical AND operator && also computes the logical AND of its operands, but doesn't evaluate the right-hand operand if the left-hand operand evaluates to false.

Dla operandów całkowitych typów liczbowychoperator & oblicza koniunkcję bitową i jej operandy.For operands of the integral numeric types, the & operator computes the bitwise logical AND of its operands. Jednoargumentowy operator & jest operatorem address-of.The unary & operator is the address-of operator.

Operator wyłączny logicznego OR ^Logical exclusive OR operator ^

Operator ^ oblicza wartość logiczną na wyłączność lub, znaną również jako logiczna XOR, jego operandów.The ^ operator computes the logical exclusive OR, also known as the logical XOR, of its operands. Wynik x ^ y jest true, jeśli x oblicza true i y oblicza false, lub x oblicza false, a y oblicza true.The result of x ^ y is true if x evaluates to true and y evaluates to false, or x evaluates to false and y evaluates to true. W przeciwnym razie wynik jest false.Otherwise, the result is false. Oznacza to, że dla operandów bool operator ^ oblicza ten sam wynik, co !=operatora nierówności .That is, for the bool operands, the ^ operator computes the same result as the inequality operator !=.

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

W przypadku operandów całkowitych typów liczbowychoperator ^ oblicza bitowe logiczne wyłącznych lub jego operandów.For operands of the integral numeric types, the ^ operator computes the bitwise logical exclusive OR of its operands.

Operator logiczny OR |Logical OR operator |

Operator | oblicza wartość logiczną lub argumentów operacji.The | operator computes the logical OR of its operands. Wynik x | y jest true, jeśli x lub y szacuje się true.The result of x | y is true if either x or y evaluates to true. W przeciwnym razie wynik jest false.Otherwise, the result is false.

Operator | oblicza oba operandy, nawet jeśli argument operacji po lewej stronie szacuje się na true, dzięki czemu wynik operacji jest true niezależnie od wartości operandu po prawej stronie.The | operator evaluates both operands even if the left-hand operand evaluates to true, so that the operation result is true regardless of the value of the right-hand operand.

W poniższym przykładzie argument operacji z prawej strony operatora | jest wywołaniem metody, które jest wykonywane niezależnie od wartości operandu po lewej stronie:In the following example, the right-hand operand of the | operator is a method call, which is performed regardless of the value of the left-hand operand:

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

Warunkowy operator logiczny or || oblicza również wartość logiczną lub jej operandów, ale nie oblicza wartości operandu po prawej stronie, jeśli argument operacji po lewej stronie szacuje się na true.The conditional logical OR operator || also computes the logical OR of its operands, but doesn't evaluate the right-hand operand if the left-hand operand evaluates to true.

Dla operandów całkowitych typów liczbowychoperator | oblicza bitową wartość logiczną lub jej operandów.For operands of the integral numeric types, the | operator computes the bitwise logical OR of its operands.

Warunkowe &logiczne i operatory &Conditional logical AND operator &&

Warunkowe operatory logiczne i &&, znane także jako operator logiczny "krótki-obwód", oblicza wartość logiczną i argumentów operacji.The conditional logical AND operator &&, also known as the "short-circuiting" logical AND operator, computes the logical AND of its operands. Wynik x && y jest true, jeśli oba x i y są oceniane do true.The result of x && y is true if both x and y evaluate to true. W przeciwnym razie wynik jest false.Otherwise, the result is false. Jeśli x oblicza false, y nie jest oceniane.If x evaluates to false, y is not evaluated.

W poniższym przykładzie argument operacji po prawej stronie operatora && jest wywołaniem metody, które nie jest wykonywane, jeśli argument operacji po lewej stronie szacuje się na false:In the following example, the right-hand operand of the && operator is a method call, which isn't performed if the left-hand operand evaluates to 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

Operator logiczny i & oblicza również wartości logiczne i jego operandy, ale zawsze oblicza oba operandy.The logical AND operator & also computes the logical AND of its operands, but always evaluates both operands.

Warunkowe logiczne OR operator | |Conditional logical OR operator ||

Warunkowe operatory logiczne OR ||, znane także jako operator logiczny OR "krótkie-obwód", oblicza wartość logiczną lub argumentów operacji.The conditional logical OR operator ||, also known as the "short-circuiting" logical OR operator, computes the logical OR of its operands. Wynik x || y jest true, jeśli x lub y szacuje się true.The result of x || y is true if either x or y evaluates to true. W przeciwnym razie wynik jest false.Otherwise, the result is false. Jeśli x oblicza true, y nie jest oceniane.If x evaluates to true, y is not evaluated.

W poniższym przykładzie argument operacji po prawej stronie operatora || jest wywołaniem metody, które nie jest wykonywane, jeśli argument operacji po lewej stronie szacuje się na true:In the following example, the right-hand operand of the || operator is a method call, which isn't performed if the left-hand operand evaluates to 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

Operator logiczny or | oblicza również wartości logiczne lub jego operandy, ale zawsze oblicza oba operandy.The logical OR operator | also computes the logical OR of its operands, but always evaluates both operands.

Logiczne operatory wartości nullNullable Boolean logical operators

Dla argumentów operacji bool? operatory & i | obsługują logikę z trzema wartościami.For bool? operands, the & and | operators support the three-valued logic. Semantyka tych operatorów jest definiowana przez następującą tabelę:The semantics of these operators is defined by the following table:

xx {1>y<1}y x & yx&y x|yx|y
truetrue truetrue truetrue truetrue
truetrue {1>false<1}false {1>false<1}false truetrue
truetrue {1>null<1}null {1>null<1}null truetrue
{1>false<1}false truetrue {1>false<1}false truetrue
{1>false<1}false {1>false<1}false {1>false<1}false {1>false<1}false
{1>false<1}false {1>null<1}null {1>false<1}false {1>null<1}null
{1>null<1}null truetrue {1>null<1}null truetrue
{1>null<1}null {1>false<1}false {1>false<1}false {1>null<1}null
{1>null<1}null {1>null<1}null {1>null<1}null {1>null<1}null

Zachowanie tych operatorów różni się od typowego zachowania operatora z zerowymi typami wartości.The behavior of those operators differs from the typical operator behavior with nullable value types. Zazwyczaj operator, który jest zdefiniowany dla operandów typu wartości, może być również używany z operandami odpowiadającego typu wartości null.Typically, an operator which is defined for operands of a value type can be also used with operands of the corresponding nullable value type. Taki operator wytwarza null, jeśli którykolwiek z jego operandów zwróci null.Such an operator produces null if any of its operands evaluates to null. Jednak operatory & i | mogą generować wartości inne niż null, nawet jeśli jeden z operandów szacuje się w null.However, the & and | operators can produce non-null even if one of the operands evaluates to null. Aby uzyskać więcej informacji o zachowaniu operatora z typem wartości null, zobacz sekcję zniesione operatory w artykule typy wartości null .For more information about the operator behavior with nullable value types, see the Lifted operators section of the Nullable value types article.

Można również użyć operatorów ! i ^ z argumentami operacji bool?, jak pokazano w poniższym przykładzie:You can also use the ! and ^ operators with bool? operands, as the following example shows:

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

Warunkowe operatory logiczne && i || nie obsługują argumentów operacji bool?.The conditional logical operators && and || don't support bool? operands.

Przypisanie złożoneCompound assignment

Dla operatora binarnego opwyrażenie złożonego przypisania formularzaFor a binary operator op, a compound assignment expression of the form

x op= y

jest równoważnyis equivalent to

x = x op y

z tą różnicą, że x są oceniane tylko raz.except that x is only evaluated once.

Operatory &, |i ^ obsługują przypisanie złożone, co ilustruje poniższy przykład:The &, |, and ^ operators support compound assignment, as the following example shows:

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

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

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

Warunkowe operatory logiczne && i || nie obsługują przypisania złożonego.The conditional logical operators && and || don't support compound assignment.

Pierwszeństwo operatorówOperator precedence

Poniższa lista porządkuje operatory logiczne rozpoczynając od najwyższego priorytetu do najniższego:The following list orders logical operators starting from the highest precedence to the lowest:

  • ! operatora negacji logicznejLogical negation operator !
  • Operatory logiczne i &Logical AND operator &
  • ^ operatora logicznego wyłącznego ORLogical exclusive OR operator ^
  • | operatora logicznego ORLogical OR operator |
  • Warunkowe operatory logiczne i &&Conditional logical AND operator &&
  • Warunkowe || operatora logicznego ORConditional logical OR operator ||

Użyj nawiasów (), aby zmienić kolejność oceny nałożona przez pierwszeństwo operatorów:Use parentheses, (), to change the order of evaluation imposed by operator precedence:

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

Aby uzyskać pełną listę C# operatorów uporządkowanych według poziomu pierwszeństwa, zobacz sekcję pierwszeństwo operatorów w artykule C# Operators .For the complete list of C# operators ordered by precedence level, see the Operator precedence section of the C# operators article.

Przeciążanie operatoraOperator overloadability

Typ zdefiniowany przez użytkownika może przeciążać operatory !, &, |i ^.A user-defined type can overload the !, &, |, and ^ operators. Gdy operator binarny jest przeciążony, odpowiadający mu operator przypisania złożonego jest również niejawnie przeciążony.When a binary operator is overloaded, the corresponding compound assignment operator is also implicitly overloaded. Typ zdefiniowany przez użytkownika nie może jawnie przeciążać złożonego operatora przypisania.A user-defined type cannot explicitly overload a compound assignment operator.

Typ zdefiniowany przez użytkownika nie może przeciążać warunkowych operatorów logicznych && i ||.A user-defined type cannot overload the conditional logical operators && and ||. Jednakże, jeśli typ zdefiniowany przez użytkownika przeciążuje Operatory true i false oraz operator & lub | w określony sposób, && lub || operacji, można je obliczyć odpowiednio dla operandów tego typu.However, if a user-defined type overloads the true and false operators and the & or | operator in a certain way, the && or || operation, respectively, can be evaluated for the operands of that type. Aby uzyskać więcej informacji, zapoznaj się z sekcją Operatory logiczne warunkowe w C# specyfikacji języka.For more information, see the User-defined conditional logical operators section of the C# language specification.

specyfikacja języka C#C# language specification

Aby uzyskać więcej informacji, zobacz następujące sekcje C# specyfikacji języka:For more information, see the following sections of the C# language specification:

Zobacz takżeSee also