11. 관계형 연산자와 논리 연산자 사용하기

  • 9 minutes to read

이번 강의는 두 변수의 관계를 따지는 관계형 연산자와 참 또는 거짓의 논리를 따지는 논리 연산자의 2가지 연산자에 대해서 학습합니다.

> // 관계형 연산자: < 작음, <= 작거나 같음, > 큼, >= 크거나 같음, == 같음, != 다름
> // 논리 연산자: && 논리곱, || 논리합, ! 논리부정

미리보기 강의: 관계형 연산자(Relational Operator) 의사 코드로 표현

https://youtu.be/80wKnEpWaF0

11.1. 관계형 연산자

관계형 연산자(비교 연산자;Relational Operator, Comparative Operator)는 두 항이 큰지, 작은지 또는 같은지 등을 비교하는데 사용되며, 관계형 연산자의 결괏값은 논리 데이터 타입의 참(True)을 나타내는 1과 또는 거짓(False)을 나타내는 0으로 출력됩니다.

관계형 연산자의 종류는 다음과 같습니다.

< (작음), <= (작거나 같음), > (큼), >= (크거나 같음), == (같음), != (다름(같지 않음))

다음 코드는 관계형 연산자의 실행 모습입니다.

코드: relational_operator.c

#include <stdio.h>

int main(void)
{
    // 3이 5보다 작은지?
    printf("%d\n", 3 < 5); // 1 -> True
    // 3이 5보다 큰지? 
    printf("%d\n", 3 > 5); // 0 -> False

    return 0;
}
1
0

다음은 관계형 연산자의 사용 예입니다.

표: 관계형 연산자

관계형 연산자

11.1.1. 관계형 연산자 사용하기

두 변수의 관계를 비교해보는 관계형 연산자를 사용해보겠습니다.

코드: operator_relational.c

// 관계형 연산자(비교 연산자;Relational Operator, Comparative Operator)
// 관계형 연산자: < 작음, <= 작거나 같음, > 큼, >= 크거나 같음, == 같음, != 다름
#include <stdio.h>

int main(void)
{
    int x = 3;
    int y = 5;

    printf("%d\n", x == y); // 0: x와 y가 같은지
    printf("%d\n", x != y); // 1: x와 y가 다른지
    printf("%d\n", x > y); // 0: x가 y보다 큰지
    printf("%d\n", x >= y); // 0: x가 y보다 크거나 같은지 
    printf("%d\n", x < y); // 1: x가 y보다 작은지 
    printf("%d\n", x <= y); // 1: x가 y보다 작거나 같은지 

    return 0;
}
0
1
0
0
1
1

C 언어에서 두 개의 데이터를 비교할 때 사용되는 비교 연산자 중에서 == 연산자는 데이터가 같은지 확인합니다. 같으면 참(true - 1)을 다르면 거짓(false - 0)의 데이터인 bool 형식의 데이터가 반환됩니다. 나머지 관계형 연산자도 그 의미에 맞게 논리 형식의 결과가 주어집니다.

C 언어 프로그래밍 언어에서는 ==, != 등의 관계형 연산자 없이는 프로그램을 작성할 수가 없습니다. 다른 연산자도 마찬가지로 사용할 때 연산자 기호는 띄어쓰기를 하면 안 되며, 연산자와 피연산자 사이에는 공백을 하나 두는 방식을 추천합니다.

11.2 논리 연산자 사용하기

논리 연산자(Logical Operator)는 논리곱(AND), 논리합(OR), 논리부정(NOT)의 조건식에 대한 논리 연산을 수행합니다. 연산의 결과 값은 참(True) 또는 거짓(False)의 부울(bool) 형식으로 반환되어 불리언(Boolean) 연산자라고도 합니다. 논리 연산자도 비교 연산자와 마찬가지로 결괏값은 참 또는 거짓 값을 반환합니다.

논리 연산자의 종류는 다음 표와 같습니다.

표: 논리 연산자

논리 연산자

A항(식)과 B항(식)의 값에 따른 3가지 결과의 논리표(진리표, Truth Table)는 다음과 같이 표시할 수 있습니다.

표: 논리표

논리표

11.3 논리 AND 연산자 사용하기

논리 AND 연산자는 둘 다 참일 때에만 참을 반환합니다.

코드: and_operator.c

#include <stdio.h>

int main(void)
{
    //[A] 둘 다 참일때에만 참
    printf("%d\n", 1 && 1); // 1

    //[B] 하나라도 거짓이면 거짓
    printf("%d\n", 1 && 0); // 0

    return 0;
}
1
0

AND 연산자인 && 연산자의 4가지 사용 예를 살펴 보겠습니다.

코드: logical_and.c

///[?] 논리 연산자: && -> 논리 AND: 양쪽 다 모두 참일 때에만 참
#include <stdio.h>

int main(void)
{
    // && 연산자: AND
    printf("1 && 1 -> %d\n", 1 && 1); // 1
    printf("1 && 0 -> %d\n", 1 && 0); // 0
    printf("0 && 1 -> %d\n", 0 && 1); // 0
    printf("0 && 0 -> %d\n", 0 && 0); // 0

    return 0;
}
1 && 1 -> 1
1 && 0 -> 0
0 && 1 -> 0
0 && 0 -> 0

실행 결과처럼 && 연산자는 둘 다 참일 때에만 참을 반환해줍니다.

11.4 논리 OR 연산자 사용하기

OR 연산자인 || 연산자를 사용해 보겠습니다.

코드: or_operator.c

#include <stdio.h>

int main(void)
{
    //[A] 하나라도 참이면 참
    printf("%d\n", 0 || 1); // 1
    //[B] 둘 다 거짓일때에만 거짓
    printf("%d\n", 0 || 0); // 0

    return 0; 
}
1
0

OR 연산자의 4가지 유형을 살펴보겠습니다.

코드: logical_or.c

// 논리 연산자: || -> 논리 OR: 하나라도 참이면 참
#include <stdio.h>

int main(void)
{
    // || 연산자: OR
    printf("1 || 1 -> %d\n", 1 || 1); // 1
    printf("1 || 0 -> %d\n", 1 || 0); // 1
    printf("0 || 1 -> %d\n", 0 || 1); // 1
    printf("0 || 0 -> %d\n", 0 || 0); // 0

    return 0;
}
1 || 1 -> 1
1 || 0 -> 1
0 || 1 -> 1
0 || 0 -> 0

실행 결과처럼 || 연산자는 하나라도 참이면 참을 반환하고 둘 다 거짓일 때에만 거짓을 반환해줍니다.

11.5 참고: 단락(Short-Circuiting, short-circuit evaluation) 평가

C 언어에서 단락이라는 기능은 AND 연산과 OR 연산을 진행할 때 부분의 결괏값에 따라서 나머지 연산 결과가 결정되는 기능을 말하며 다음과 같은 두 가지 유형이 있습니다.

  • (연산식1 && 연산식2): 연산식1이 거짓(False)이면 연산식2와 상관없이 전체 결과값이 거짓(False)이 됩니다.
  • (연산식1 || 연산식2): 연산식1이 참(True)이면 연산식2의 결과값과 상관없이 전체 결과값이 참(True)이 됩니다.

11.6 논리 NOT 연산자 사용하기

NOT 연산자인 ! 연산자를 사용해 보겠습니다. 다음 샘플 코드는 눈으로 본 후 넘어갑니다.

> (1 == 1)
1
> !(1 == 1)
0
> (1 != 1)
0
> !(1 != 1)
1

NOT 연산자는 항이 하나인 단항 연산자입니다.

코드: logical_not.c

// 논리 연산자: ! -> 논리 NOT: 참이면 거짓, 거짓이면 참으로 변환
#include <stdio.h>

int main(void)
{
    // ! 연산자: NOT
    printf("!1 -> %d\n", !1); // 0
    printf("!0 -> %d\n", !0); // 1
    printf("!!0 -> %d\n", !!0); // 0
    printf("!(!(!0)) -> %d\n", !(!(!0))); // 1

    return 0;
}
!1 -> 0
!0 -> 1
!!0 -> 0
!(!(!0)) -> 1

실행 결과처럼 ! 연산자는 조건식의 결과를 반대로 바꾸어 줍니다.

이처럼 !(느낌표) 연산자는 bool 형식 변수의 값을 반대로 변경합니다. true 값이면 falsefalse 값이면 true로 변경해 줍니다.

11.7 참고: 디버거 사용하기

C 언어에서 코드 분석을 쉽게 하려면 F10(프로시저 단위 실행) 또는 F11(한 단계씩 코드 실행)을 적절히 사용하면 도움이 됩니다. 강의에서 따로 디버그 기능을 언급하지 않는다 하더라도 예제를 분석할 때마다 사용하기를 권장합니다.

11.8 장 요약

이번 강의는 값을 비교하는 관계형 연산자와 논리적인 참 또는 거짓을 다루는 논리 연산자에 대해 다루어보았습니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com