Skip to content

17. 불 자료형


1. 키워드

  • 불(Boolean) 자료형


2. 불 자료형 사용하기

  • 불 자료형은 논리형 자료형이라고도 하며 참과 거짓을 나타낸다.
  • C는 0을 거짓으로, 0이 아닌 숫자를 참으로 사용하지만 stdbool.h 헤더 파일을 사용하면 true를 참으로, false를 거짓으로 나타낼 수 있다.


3. stdbool.h 헤더 파일 사용하기

  • stdbool.h 헤더 파일로 불 자료형을 사용해 보자.


#include <stdio.h>
#include <stdbool.h> // bool, true, false가 정의된 헤더 파일

int main()
{
    bool b1 = true;

    if (b1 == true)     // b1이 true인지 검사
        printf("참\n"); // b1이 true이므로 참이 출력됨
    else
        printf("거짓\n");

    return 0;
}


  • 먼저 #includestdbool.h 헤더 파일을 포함한 뒤 자료형 bool과 값 true, false를 사용하면 된다.
  • 여기서는 변수 b1true를 할당했고, if 조건문으로 b1true인지 비교했다.
  • 물론 같은 true이므로 "참"이 출력된다.


4. 불 자료형 크기 알아보기

  • 이번에는 int 자료형과 bool 자료형의 크기를 알아보자.


#include <stdio.h>
#include <stdbool.h> // bool, true, false가 정의된 헤더 파일

int main()
{
    printf("int의 크기: %d\n", sizeof(int));   // int의 크기는 4바이트
    printf("bool의 크기: %d\n", sizeof(bool)); // bool의 크기는 1바이트

    return 0;
}

// int의 크기: 4
// bool의 크기: 1


  • sizeof 연산자로 intbool 자료형의 크기를 구했다.
  • 출력 결과에 따르면 int의 크기는 4바이트, bool의 크기는 1바이트이다.
  • 지금까지 int로 참, 거짓을 표현했는데 intbool은 크기가 다르다는 점을 기억하자.


5. 불 자료형과 논리 연산자 사용하기

  • 불 자료형과 논리 연산자를 함께 사용해 보자.


#include <stdio.h>
#include <stdbool.h> // bool, true, false가 정의된 헤더 파일

int main()
{
    printf("%d\n", true && true);   // true AND true는 1
    printf("%d\n", true && false);  // true AND false는 0
    printf("%d\n", false && true);  // false AND true는 0
    printf("%d\n", false && false); // false AND false는 0

    printf("%d\n", true || true);   // true OR true는 1
    printf("%d\n", true || false);  // true OR false는 1
    printf("%d\n", false || true);  // false OR true는 1
    printf("%d\n", false || false); // false OR false는 0

    return 0;
}

// 1
// 0
// 0
// 0
// 1
// 1
// 1
// 0


  • true, false와 논리 연산자를 함께 사용하니 코드가 좀 더 명확하게 보인다.
  • 하지만 printf로 결과를 출력할 때는 정수를 출력하는 것처럼 서식 지정자 %d를 사용한다.
  • stdbool.h에는 자료형과 불값만 정의할 뿐 전용 서식 지정자는 없다.


6. true, false를 문자열로 출력하기

  • true, falseprintf로 출력하고 싶다면 다음과 같이 삼항 연산자와 문자열을 활용하면 된다.


#include <stdio.h>
#include <stdbool.h> // bool, true, false가 정의된 헤더 파일

int main()
{
    bool b1 = true;
    bool b2 = false;

    printf(b1 ? "true" : "false"); // b1이 true이므로 true가 출력됨
    printf("\n");
    printf(b2 ? "true" : "false"); // b2가 false이므로 false 출력됨
    printf("\n");

    printf("%s\n", b1 ? "true" : "false"); // b1이 true이므로 true가 출력됨
    printf("%s\n", b2 ? "true" : "false"); // b2가 false이므로 false 출력됨

    return 0;
}

// true
// false
// true
// false


  • printf 안에서 삼항 연산자를 활용하여 변수가 true이면 "true" 문자열을 출력하고, false이면 "false" 문자열을 출력한다.
  • 서식 지정자 없이 그대로 출력해도 되고, %s 서식 지정자를 사용해도 된다.
  • 삼항 연산자는 조건식뿐만 아니라 참, 거짓 값으로도 판단할 수 있으므로 불값이 들어있는 변수를 그대로 사용하면 된다.


7. if 조건문에서 불 자료형 사용하기

  • 불 자료형은 if 조건문에서 그대로 사용할 수 있다.


#include <stdio.h>
#include <stdbool.h> // bool, true, false가 정의된 헤더 파일

int main()
{
    if (true)           // 불 true 사용
        printf("참\n"); // 참이므로 참이 출력됨
    else
        printf("거짓\n");

    if (false) // 불 false 사용
        printf("참\n");
    else
        printf("거짓\n"); // 거짓이므로 거짓이 출력됨

    return 0;
}

// 참
// 거짓


  • if 조건문에 true, false를 사용하니 좀 더 읽기가 편해졌다.
  • 여기서는 값이 고정되어 있기 때문에 결과는 항상 똑같다.

References