논리 연산자

Jaemyeong Lee·2024년 7월 31일
0

FastCampusC++

목록 보기
12/78

논리 연산자 코드 및 주석

#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, 조건이 참이면 거짓, 거짓이면 참!aa가 참이면 false, 거짓이면 true

논리 연산자의 우선순위

연산자우선순위결합성
!가장 높음오른쪽에서 왼쪽
&&중간왼쪽에서 오른쪽
``````

주요 개념 설명

  1. AND (&&) 연산자:

    • 두 조건이 모두 참일 때만 참입니다.
    • 예시: if (num0 == num1 && num2 != num3)
  2. OR (||) 연산자:

    • 두 조건 중 하나라도 참일 때 참입니다.
    • 예시: if (num0 == num1 || num2 == num3)
  3. NOT (!) 연산자:

    • 조건이 참이면 거짓으로, 거짓이면 참으로 변환합니다.
    • 예시: if (!num0)
  4. Short-circuit Evaluation:

    • && 연산에서 첫 번째 조건이 거짓이면 두 번째 조건을 평가하지 않습니다.
    • || 연산에서 첫 번째 조건이 참이면 두 번째 조건을 평가하지 않습니다.
    • 예시: if (num0 == num1 && num2 == num3), if (num0 != num1 || num2 == num3)
  5. 시퀀스 포인트:

    • &&|| 연산자는 시퀀스 포인트를 제공하여 연산이 끝난 후의 상태를 보장합니다.
profile
李家네_공부방

0개의 댓글