본문 바로가기
c언어

c언어 논리 연산자에 대하여 알아보기

by 개발자 L 2022. 12. 2.
반응형

c언어 논리 연산자에 대하여 알아보기

네 안녕하세요, 이번 포스팅에서는 c언어 논리 연산자를 한 번 다뤄보도록 하겠습니다.

논리 연산자는 쉽게 말해서 어떤 전제 조건을 명시하고, 그것이 참인지, 거짓인지의 여부에 따라서 값을 달리 낼 때 쓰는 연산자입니다.

그래서 이는 보통 나중에 포스팅을 할 문법 중에 조건문을 쓰거나 반복문을 쓸 때 많이 씁니다.

그래서 이번 포스팅에서는 이러한 논리 연산자가 어떤 것들이 있으며, 그 쓰임은 어떻게 되는지 한 번 같이 보도록 하겠습니다.

그럼, 같이 보실까요?

 

1. and와 or 연산자

and 연산자는 글로 표현을 하면 '~이고'가 됩니다.

그래서 a와 b가 있다고 한다면 'a 그리고 b'가 됩니다.

그래서 두 개의 조건이 모두 부합이 되어야만 참이 나오는 연산자입니다.

그래서 and 연산자를 다른 말로 '논리곱'이라고 표현을 합니다.

그리고 표기는 '&&'로 합니다.

or 연산자의 경우는 글로 표현을 하면 ' ~또는'입니다.

그래서 a와 b가 있다고 한다면 'a 또는 b'로 표현을 할 수 있습니다.

or 연산자는 and 연산자와는 다르게 하나만 조건에 부합을 해도 참이 나옵니다.

그 이유는 '또는'이라는 전제 조건이 붙기 때문입니다.

그래서 or 연산자를 다른 말로 '논리합'이라고도 표현을 합니다.

표기는 '||'로 합니다.

 

2. not 연산자

not 연산자는 글로 표현을 하면 '~아니면'입니다.

그래서 a와 b가 있다고 했을 때, 'a가 b가 아니면' 이렇게 쓰곤 합니다.

그리고 not 연산자의 큰 특징이 있다면,

and와 or 연산자와는 반대로 작용을 합니다.

and와 or 연산자는 참이면 참, 거짓이면 거짓이지만,

not 연산자는 참이면 거짓, 거짓이면 참을 나타냅니다.

그 이유는 '~가 아니다'라는 전제가 붙기 때문에 반대되는 결과가 나오는 겁니다.

그리고 또 하나 알아두면 좋은 것은 '!!'를 하면 부정을 부정한 것이 되기 때문에 참이 됩니다.

보통 이렇게 쓰지는 않지만, 때에 따라 쓰게 되는 경우가 생기니, 알아두시면 도움이 될 수 있을 겁니다.

반응형

 

3. 참과 거짓의 표현

제가 위에서 설명한 논리 연산자들을 간단한 표로 한 번 정리를 해봤습니다.

연산 의미
x && y x와 y가 모두 참이면 참, 하나라도 거짓이면 거짓(and)
x || y x와 y 중 하나라도 참이면 참, 둘 다 거짓이면 거짓(or)
!x x가 참이면 거짓, 거짓이면 참(not)

이렇게 나타낼 수 있습니다.

그리고 and 연산자와 or 연산자의 참과 거짓 여부를 진리치 표로도 나타낼 수 있습니다.

이 역시 알아두면 좋으니, 표로 정리를 해뒀습니다.

x y x && y x || y11
1(참) 1(참) 1(참) 1(참)
1(참) 0(거짓) 0(거짓) 1(참)
0(거짓) 1(참) 0(거짓) 1(참)
0(거짓) 0(거짓) 0(거짓) 0(거짓)

이런 식으로 나타낼 수 있습니다.

그리고 프로그래밍 언어에서 참과 거짓은 각각 1과 0으로 나타냅니다.

그래서 진리치 표의 값도 1 또는 0으로 표현이 됩니다.

이를 간단한 예제를 통하여 한 번 알아볼까요?

#include <stdio.h>

int main()

{
    int x, y;

    printf("두 개의 정수를 입력하시오 : ");
    scanf("%d %d", &x, &y);

    printf("%d && %d의 결과값 : %d\n", x, y, x && y);
    printf("%d || %d의 결과값 : %d\n", x, y, x || y);
    printf("!%d의 결과값 : %d\n", x, !x);

    return 0;

}

이렇게 한 번 작성을 해봤습니다.

각각은 논리 연산자가 어떻게 작동을 하는지 알아보기 위해서 작성을 해본 코드입니다.

일반적으로 사용을 하는 건 아니지만, 우리가 개념을 잡고 넘어가야 하기 때문에 이렇게 작성을 해봤습니다.

그러면 결과가 어떻게 나오는지 한 번 보도록 하겠습니다.

두 개의 정수를 입력하시오 : 1 0
1 && 0의 결괏값 : 0
1 || 0의 결괏값 : 1
!1의 결괏값 : 0

저는 1과 0을 입력을 했습니다.

참과 거짓 여부를 좀 더 쉽게 알아보기 위해서 이렇게 입력을 했습니다.

그랬더니 이런 결과가 나왔습니다.

and는 둘 중 하나가 참이 아니기 때문에 거짓,

or은 둘 중 하나가 참이기 때문에 참,

not은 참을 부정했기 때문에 거짓이 나왔습니다.

이렇게 참과 거짓을 판단하여 무언가를 분별해내는 프로그램을 짜 볼 수 있습니다.

 

4. 단축 계산

우리가 사용하는 기법 중에서 단축 계산이라는 기법이 있습니다.

단축 계산은 말 그대로 계산을 단축하는 겁니다.

그래서 모든 피연산자들을 연산하지 않고, 전체적인 수식의 값만 얻는 것입니다.

이건 컴파일러에서 컴파일링이 될 때 나오는 것인데,

제가 예를 두 가지를 들어보겠습니다.

(2 > 3) && (++x < 5);
(3 > 2) || (==x < 5);

이 두 가지 경우가 있다고 가정을 해봅시다.

위의 경우는 이미 앞부분이 거짓이 나왔습니다.

그리고 and 연산자이기 때문에 뒷부분이 참이라 할 지라도 거짓으로 출력이 됩니다.

그래서 && 뒷부분에 있는 수식은 계산이 되지 않고, 컴파일러에서는 앞부분만 계산을 하고 바로 결과를 거짓으로 출력을 합니다.

밑의 경우는 앞부분이 참이 나왔습니다.

그리고 연산자는 or 연산자이기 때문에 둘 중 하나라도 참이라면 참으로 출력을 합니다.

그래서 이미 앞부분이 참이기 때문에 컴파일러에서는 뒷부분을 연산하는 것이 의미가 없다고 생각을 하고, 무시를 합니다.

그래서 앞부분의 연산 결과인 참을 출력을 합니다.

그래서 필요에 따라서는 이러한 단축 계산을 하곤 하지만,

되도록이면 그냥 식의 값을 모두 얻어서 정확한 계산을 하는 것이 더 바람직합니다.

 

여기까지 c언어 논리 연산자에 대하여 알아보았는데요,

다음 포스팅에서는 c언어 조건 연산자에 대하여 알아보도록 하겠습니다.

긴 글 읽어주신 독자분들께 진심으로 감사드립니다 ~

반응형

댓글