본문 바로가기
  • 오늘도 신나게
코딩을 합시다/최대한 쉽게 설명한 C 언어

초등학생도 이해하는 C 언어 - 논리 연산자

by 앵그리선반장 2020. 5. 7.

논리 연산자는 AND, OR, NOT 이 있습니다.

디지털 논리 게이트를 아신다면 매우 쉬운 개념입니다.

기본 게이트

위 논리 게이트들은 결과 값이 1 또는 0 으로 나오며 1을 참(True) 이라 하고 0(False) 을 거짓 이라고 합니다.

NOT 은 C 언어에서 ! 입니다.

OR 은 C 언어에서 || 입니다.

AND 는 C 언어에서 && 입니다.

그래서 변수 에 ! 을 붙이면 논리 값이 반전 됩니다.

|| 로 연산된 값은 둘중 하나만 참이면 참이 되어 결과 값이 1 이 됩니다.

만약 둘다 거짓이라면 결과 값은 0 이 됩니다. ( 더하기와 같아요)

&& 는 둘다 참일 경우만 결과 값이 1 이 됩니다. ( 곱하기와 같아요)

예제 코드를 보겠습니다.

#include <stdio.h>

void main (void)
{
  int a,b,c;
  
  a = 3;
  b = 0;
  c = 2;
  
  printf( "!a = %d \n", !a);
  printf( "a+b = %d \n", (a || b));
  printf( "a*b = %d \n", (a && b));
  printf( "a*c = %d \n", (a && c));
}

이 코드를 실행 시키면 아래와 같은 결과를 출력 합니다.

!a = 0 
a+b = 1 
a*b = 0 
a*c = 1 

a 는 분명 3 으로 초기화 했으나 ! 을 붙였더니 0 이 되었습니다.

그 이유는 3 은 0 이 아니므로 논리 적으로 참 즉, 1 이 됩니다.

여기에 ! 을 붙여 논리를 반전 했으니 값은 0 이 됩니다.

a || b 는 a+b 의 논리와 같으며, a=3 이므로 참(1) 이고, b=0 이므로 거짓(0) 입니다.

따라서 a || b = 참 (1 ) 이 됩니다.

또 a * b 는 참(1) 과 거짓(0) 의 곱이므로 거짓(0) 이 되고,

a * b 는 참(1) 과 참(1) 의 곱이므로 참(1) 이 나옵니다.

원리를 알고 보면 매우 간단 합니다.

참고로 참 과 거짓은 변수의 값이 0 이냐 아니냐에 따라 결정 됩니다.

처음 프로그래밍 언어를 배우시는 경우 참을 0보다 큰수 로 생각 하는 경우가 있는데요.

-2 도 참입니다. 0 이 아니면 무조건 참 입니다.

따라서 아래 코드도 결과는 같습니다.

#include <stdio.h>

void main (void)
{
  int a,b,c;
  
  a = -3;
  b = 0;
  c = -2;
  
  printf( "!a = %d \n", !a);
  printf( "a+b = %d \n", (a || b));
  printf( "a*b = %d \n", (a && b));
  printf( "a*c = %d \n", (a && c));
}

 

그리고 ' | ' 와 ' || ' 는 비슷 하지만 엄연히 다르며, 마찬가지로 ' & ' 와 ' && '  도 다릅니다.

이 것들은 비트 연산에서 자세히 다루겠습니다.

댓글