' [C/C++] 9.1강 - 제어문에서 논리 연산자 사용하기 (if의 사용법)

Programming/C & C++

[C/C++] 9.1강 - 제어문에서 논리 연산자 사용하기 (if의 사용법)

mdisprgm 2021. 7. 20. 10:31
728x90
728x90

(1) 조건 여러 개 사용하기

#include <stdio.h>

int main() {
  int a, b;
  a = 3, b = 5;

  if (a == 3) {
    if (b == 5) {
      printf("a는 3, b는 5입니다\n");
    }
  }
}

저번 강좌에서 이렇게 if문 여러 개를 겹쳐

 

두 조건을 동시에 만족하는 경우에 코드를 실행할 수 있다고 했다.

 

하지만 이것보다 더 편리하고 직관적으로 여러 개의 조건을 사용하는 방법이 있는데,

 

그것이 바로 논리 연산자이다.

 

 

(2) 논리 연산자란?

논리 연산자란, 연산자 파트에서도 말했지만 다시 말하자면

 

관계 연산자로 판단한 결과를 다시 논리적으로 비교하는 연산자이다.

 

그 종류는 아래와 같다.

연산자 용도
&&(AND) 양쪽이 모두 참일 때 참을 반환함
||(OR) 양쪽 중 하나만이라도 참일 때 참을 반환함
!(NOT) 참->거짓
거짓->참
으로 반전시켜줌

 

 

(3) 논리 연산자 사용하기

먼저 && 연산자를 사용해보자

#include <stdio.h>

int main() {
  int a, b;
  a = 3, b = 5;

  if (a == 3 && b == 5) {
    printf("a는 3, b는 5입니다");   
  }
}

이렇게 하면 a == 3, b == 5을 모두 비교해서 둘 다 참일 때만 출력이 될 것이다.

 

따라서 위에 코드는 printf가 실행된다.

 

반면 이런 식으로 b = 7;로 고쳐주면

#include <stdio.h>

int main() {
  int a, b;
  a = 3, b = 7;

  if (a == 3 && b == 5) {
    printf("a는 3, b는 5입니다");   
  }
}

a == 3은 참이지만 b == 5가 거짓이므로 

 

아무것도 출력되지 않고 프로그램이 종료된다.

 

그런데 여기서 연산자를 || 로 바꿔주면

#include <stdio.h>

int main() {
  int a, b;
  a = 3, b = 7;

  if (a == 3 || b == 5) {
    printf("a는 3 또는 b는 5입니다");   
  }
}

b == 5가 거짓이지만 a == 3이 참이기에

 

if문이 작동했다.

 

 

이렇게 전체 조건을 괄호로 묶어준 후, ! 연산자를 사용하여

 

실행 조건을 반전시킬 수도 있다.

#include <stdio.h>

int main() {
  int a, b;
  a = 3, b = 5;

  if (!(a == 3 && b == 5))/*이렇게 연산자의 우선 순위를 바꿔주거나 하나로 묶을 수 있다*/ {
  //a != 3 && b != 5 와 같은 논리
    printf("a는 3, b는 5입니다");   
  }
}

이렇게하면

 

가장 마지막에 연산되는 && 연산자의 결과가 참이면 거짓으로, 거짓이면 참으로 반전시켜준다.

 

이 코드에서는 a가 3이고 b가 5라서 참이 되면 거짓, a가 3이지만 b가 5가 아닌 등의 경우에서 거짓이 되면 참으로 반전시켜주므로,

 

a가 3이고 b가 5인 경우가 아닌 모든 경우 코드를 실행하게 된다.

 

 

(4) 조건으로 들어갈 수 있는 값

if와 같은 제어문에서 조건식에 들어갈 수 있는 값은 무수히 많다.

 

그중에서 0은 거짓, 0이 아닌 모든 값은 참이 되는데 이걸 이용하면 이런 식이 가능하다.

#include <stdio.h>

int main() {
  int x = 0;
  
  if (x == 0) {
    printf("x is zero~~\n");
  }
  if (!x) {
    printf("x is zero!!\n");
  }
}

실행해보면 이렇다.

 

 

두 if문이 모두 작동한 것을 확인할 수 있다.

 

x == 0 : 가 0인지 체크했으니 당연히 출력이 된 것이고

 

만약 x가 1, 2, 3.. 등의 값이라면 출력되지 않는다.

 

!x : 위에서 조건식으로 들어가는 식은 그 값이 0일 경우 거짓, 0이 아닌 다른 모든 값은 참이라고 했다.

 

그리고 ! 연산자는 참/거짓을 서로 반전시켜주는 역할을 하므로

 

x = 0 일 때 거짓 -> 참이 되고

 

x = 1,2,3,4.... 일 때  참 -> 거짓이 되어 x == 0과 !x 는 같은 표현이 된다.

 

 

다음 강좌에서는 while문을 알아볼 것이다.

728x90
728x90

'