Favicon

Logical operators

Peponi11/18/20246m

C#
SyntaxOperator&|!^&&||

1. Introduction

논리 연산자는 단항 및 이진 논리 연산을 포함한다.

  • NOT : !
  • AND : &
  • OR : |
  • XOR : ^
  • Conditional AND : &&
    • 왼쪽 피연산자가 true일 때만 오른쪽 피연산자를 평가
  • Conditional OR : ||
    • 왼쪽 피연산자가 false일 때만 오른쪽 피연산자를 평가

2. NOT

단항 논리 연산자 ! 는 피연산자의 부정을 반환한다. 접두사로 사용하며, 접미사로 사용하는 경우 null 허용 연산자가 된다.

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

3. AND

& 연산자는 AND 연산을 수행한다. 왼쪽과 오른쪽 피연산자 둘 다 true의 값을 가질 때만 true를 반환한다.

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

& 연산자는 왼쪽 피연산자가 false일 때도 오른쪽 연산자의 값을 확인한다.

bool Right()
{
    Console.WriteLine("Right");
    return true;
}
 
bool Left = true;
 
Console.WriteLine(Left & Right());
Console.WriteLine(!Left & Right());
 
/* output:
Right
True
Right
False
*/

정수 형식 피연산자의 경우 비트 연산을 수행한다.

int A = 0b_1010_1011;
int B = 0b_1101_1101;
int C = A & B;
 
Console.WriteLine(Convert.ToString(C, 2));
 
/* output:
10001001
*/

4. OR

| 연산자는 OR 연산을 수행한다. 왼쪽 또는 오른쪽 피연산자가 true의 값을 가질 때 true를 반환한다.

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

| 연산자는 왼쪽 피연산자가 true일 때도 오른쪽 연산자의 값을 확인한다.

bool Right()
{
    Console.WriteLine("Right");
    return true;
}
 
bool Left = false;
 
Console.WriteLine(Left | Right());
Console.WriteLine(!Left | Right());
 
/* output:
Right
True
Right
True
*/

정수 형식 피연산자의 경우 비트 연산을 수행한다.

int A = 0b_1010_1011;
int B = 0b_1101_1101;
int C = A | B;
 
Console.WriteLine(Convert.ToString(C, 2));
 
/* output:
11111111
*/

5. XOR

^ 연산자는 XOR 연산을 수행한다. 왼쪽과 오른쪽 피연산자의 값이 다를 때 true를 반환한다.

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

정수 형식 피연산자의 경우 비트 연산을 수행한다.

int A = 0b_1010_1011;
int B = 0b_1101_1101;
int C = A ^ B;          // 0b_0111_0110
 
Console.WriteLine(Convert.ToString(C, 2));
 
/* output:
1110110
*/

6. Conditional AND

&& 연산자는 AND 연산을 수행한다. 왼쪽과 오른쪽 피연산자 둘 다 true의 값을 가질 때만 true를 반환한다.

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

왼쪽 피연산자가 false일 때는 오른쪽 연산자의 값을 확인하지 않는다.

bool Right()
{
    Console.WriteLine("Right");
    return true;
}
 
bool Left = true;
 
Console.WriteLine(Left && Right());
Console.WriteLine(!Left && Right());
 
/* output:
Right
True
False
*/

7. Conditional OR

|| 연산자는 OR 연산을 수행한다. 왼쪽 또는 오른쪽 피연산자가 true의 값을 가질 때 true를 반환한다.

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

왼쪽 피연산자가 true일 때는 오른쪽 연산자의 값을 확인하지 않는다.

bool Right()
{
    Console.WriteLine("Right");
    return true;
}
 
bool Left = false;
 
Console.WriteLine(Left || Right());
Console.WriteLine(!Left || Right());
 
/* output:
Right
True
True
*/

8. Nullable bool

bool? 피연산자의 경우 !, &, |, ^를 지원하지만 &&, || 연산자는 지원하지 않는다. bool? 피연산자의 연산 결과는 bool과 다르게 나타난다. 아래는 bool? 피연산자의 연산 결과이다.

XY!XX & YX | YX ^ Y
truetruefalsetruetruefalse
truefalsefalsetruetrue
truenullnulltruenull
falsetruetruefalsetruetrue
falsefalsefalsefalsefalse
falsenullfalsenullnull
nulltruenullnulltruenull
nullfalsefalsenullnull
nullnullnullnullnull

9. 할당 연산자

할당 연산자 &=, |=, ^= 는 연산과 동시에 할당이 가능해지는 복합 할당 식을 가능하게 한다. 예로, 다음 두 식은 동일한 연산을 수행한다.

bool X = true;
 
X = X & false;
X &= false;

할당 연산자는 다음과 같이 사용한다.

bool AND = true;
bool OR = true;
bool XOR = true;
 
AND &= false;
OR |= false;
XOR ^= false;
 
Console.WriteLine(AND);
Console.WriteLine(OR);
Console.WriteLine(XOR);
 
/* output:
False
True
True
*/

10. 참조 자료