#include <iostream>
using namespace std;
int main()
{
{
// AND 연산자(&&)
// true && true == true
// true && false == false
// false && true == false
// false && false == false
}
{
int num0 = 10, num1(10);
int num2 = 20, num3(30);
if (num0 == num1 && num2 != num3) // == 연산자가 &&보다 우선 순위가 높다
cout << "!!!!" << endl; // 출력됨
if (num0 == num1 && num2 == num3)
cout << "@@@@" << endl; // 출력되지 않음
}
{
// OR 연산자(||)
// true || true == true
// true || false == true
// false || true == true
// false || false == false
}
{
int num0 = 10, num1(10);
int num2 = 20, num3(30);
if (num0 == num1 && num2 == num3)
cout << "AND" << endl; // 출력되지 않음
if (num0 == num1 || num2 == num3)
cout << "OR" << endl; // 출력됨
}
{
// && 연산자가 || 연산자보다 우선순위가 높다.
if (true || false && false)
cout << "OK" << endl; // 출력됨
}
{
// short-circuit evaluation
int num0 = 10, num1(20);
int num2 = 20, num3(20);
// num0 == num1 이 false이기 때문에 num2 == num3은 평가할 필요가 없어서 평가되지 않는다.
if (num0 == num1 && num2 == num3)
cout << "AND" << endl;
// num0 != num1 이 true이기 때문에 num2 == num3은 평가할 필요가 없어서 평가되지 않는다.
if (num0 != num1 || num2 == num3)
cout << "OR" << endl; // 출력됨
// printf("") 의 반환값이 0이기 때문에 false로 평가돼서 우항의 printf("ABC")는 실행되지 않는다.
printf("") && printf("ABC");
cout << endl;
// printf("a") 의 반환값이 1이기 때문에 true로 평가돼서 우항의 printf("ABC")는 실행된다.
printf("a") && printf("ABC");
cout << endl;
// printf("a") 의 반환값이 1이기 때문에 true로 평가돼서 우항의 printf("ABC")는 실행되지 않는다.
printf("a") || printf("ABC");
cout << endl;
// printf("") 의 반환값이 0이기 때문에 false로 평가돼서 우항의 printf("ABC")는 실행된다.
printf("") || printf("ABC");
cout << endl;
}
{
// &&, || 연산자는 시퀀스 포인트
// 시퀀스 포인트는 연산이 끝난 후의 상태를 보장하는 지점
}
{
// Not 연산자(!)
bool r = true;
r = !r; // r은 false가 됨
cout << r << endl; // 출력: false
}
{
// 같은 의미의 if 문
int num0 = 10, num1 = 20;
if (num0 != num1)
{
cout << "num0 != num1" << endl; // 출력됨
}
if (!(num0 == num1))
{
cout << "!(num0 == num1)" << endl; // 출력됨
}
}
{
cout.setf(ios_base::boolalpha);
// 10이 bool로 평가 될 때 true로 평가 되어서 false 출력
cout << !10 << endl; // 출력: false
// 좌항과 우항의 정수가 둘 다 0이 아니기 때문에 둘 다 true로 평가되어 true && true 가 된다.
cout << (1 && 2) << endl; // 출력: true
}
}
연산자 | 설명 | 예시 | 결과 |
---|---|---|---|
&& | 논리 AND, 두 조건이 모두 참일 때만 참 | a && b | 둘 다 참일 때 true |
` | ` | 논리 OR, 두 조건 중 하나라도 참일 때 참 | |
! | 논리 NOT, 조건이 참이면 거짓, 거짓이면 참 | !a | a가 참이면 false, 거짓이면 true |
연산자 | 우선순위 | 결합성 |
---|---|---|
! | 가장 높음 | 오른쪽에서 왼쪽 |
&& | 중간 | 왼쪽에서 오른쪽 |
``` | ``` |
AND (&&
) 연산자:
if (num0 == num1 && num2 != num3)
OR (||
) 연산자:
if (num0 == num1 || num2 == num3)
NOT (!
) 연산자:
if (!num0)
Short-circuit Evaluation:
&&
연산에서 첫 번째 조건이 거짓이면 두 번째 조건을 평가하지 않습니다.||
연산에서 첫 번째 조건이 참이면 두 번째 조건을 평가하지 않습니다.if (num0 == num1 && num2 == num3)
, if (num0 != num1 || num2 == num3)
시퀀스 포인트:
&&
와 ||
연산자는 시퀀스 포인트를 제공하여 연산이 끝난 후의 상태를 보장합니다.