逻辑非运算符
一元前缀 ! 运算符计算操作数的逻辑非。 也就是说,如果操作数的计算结果为 false ,它生成 true ;如果操作
数的计算结果为 true ,它生成 false
bool passed = false;
Console.WriteLine(!passed);
// output: True Console.WriteLine(!true);
// output: False
从 C# 8.0 起,一元后缀 ! 运算符为 null 包容运算符。
逻辑 AND 运算符 &
& 运算符计算操作数的逻辑与。
如果 x 和 y 的计算结果都为 true ,则 x & y 的结果为 true 。 否则,结果 为 false 。
即使左侧操作数计算结果为 false , & 运算符也会计算这两个操作数,而在这种情况下,无论右侧操作数的值 为何,运算结果都为 false 。
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
条件逻辑 AND 运算符 && 也计算操作数的逻辑 AND,但如果左侧操作数的计算结果为 false ,它就不会计算 右侧操作数。
对于整型数值类型的操作数, & 运算符计算其操作数的位逻辑 AND。 一元 & 运算符是 address-of 运算符。
逻辑异或运算符 ^
^ 运算符计算操作数的逻辑异或(亦称为“逻辑 XOR”)。 如果 x 计算结果为 true 且 y 计算结果为 false , 或者 x 计算结果为 false 且 y 计算结果为 true ,那么 x ^ y 的结果为 true 。 否则,结果为 false 。 也就 是说,对于 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
对于整型数值类型的操作数, ^ 运算符计算其操作数的位逻辑异或。
逻辑或运算符 |
| 运算符计算操作数的逻辑或。 如果 x 或 y 的计算结果为 true ,则 x | y 的结果为 true 。 否则,结果为 false 。 即使左侧操作数计算结果为 true , | 运算符也会计算这两个操作数,而在这种情况下,无论右侧操作数的值为 何,运算结果都为 true 。
bool SecondOperand() {
Console.WriteLine("Second operand is evareturn 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
条件逻辑 OR 运算符 || 也计算操作数的逻辑 OR,但如果左侧操作数的计算结果为 true ,它就不会计算右侧 操作数。 对于整型数值类型的操作数, | 运算符计算其操作数的位逻辑 OR。
条件逻辑与运算符 && (亦称为“短路”逻辑与运算符)计算操作数的逻辑与。 如果 x 和 y 的计算结果都为 true ,则 x && y 的结果为 true 。 否则,结果为 false 。 如果 x 的计算结果为 false ,则不计算 y 。
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