소년코딩

02.07 - Boolean 값과 if 문의 소개

실생활에서 "예" 또는"아니요"로 답할 수 있는 질문을 하거나 질문을 받는 것은 흔한 일이다.

  • 사과를 좋아하는가?: 예
  • 점심을 먹었는가?: 아니요

위 두 문장 모두 예, 아니요로 대답할 수 있는 문장이다. "예", "아니요"는 흔하므로 C++ 에서는 이들을 다루는 특별한 자료형

부울(bool)이 있다.

Boolean variables

부울 변수 참(true: 1)거짓(false: 0) 값만 가질 수 있는 변수다. 부울 변수를 선언하려면 키워드 bool을 사용한다.

bool b;

부울 변수에 true 또는 false 값을 초기화하거나 할당하려면 truefalse 키워드를 사용한다.

bool b1 = true;   // copy initialization
bool b2(false);   // direct initialization
bool b3 { true }; // uniform initialization (C++11)
b3 = false;       // assignment

빼기 연산자(-)를 이용해 양수를 음수로 바꿀 수 있는 것처럼 논리 부정 연산자(logical NOT operator: !)를 사용해서 부울 값을 true에서 false 또는 false에서 true로 바꿀 수 있다.

bool b1 = !true; // b1 will have the value false
bool b2(!false); // b2 will have the value true

부울 값은 실제로 부울 변수에 "true" 또는"false"라는 단어로 저장되지 않고 정수로 저장된다. true는 정수 1이 되고 false는 정수 0이 된다. 마찬가지로 부울 값을 평가할 때도 "true" 또는 "false"가 아닌 정수 1(true), 0(false) 로 평가된다.

따라서 std::cout을 이용해 부울 값을 출력하면 true는 1을 false는 0을 출력한다.

int main()
{
    std::cout << true << std::endl; // true evaluates to 1
    std::cout << !true << std::endl; // !true evaluates to 0

    bool b(false);
    std::cout << b << std::endl; // b is false, which evaluates to 0
    std::cout << !b << std::endl; // !b is true, which evaluates to 1
    return 0;
}

This outputs:
1
0
0
1

만약 std::cout을 이용해 0 또는 1 대신 "true" 또는 "false"를 출력하려면 std::boolalpha를 사용하면 된다.

#include <iostream>

int main()
{
    std::cout << true << std::endl;
    std::cout << false << std::endl;

    std::cout << std::boolalpha; // print bools as true or false

    std::cout << true << std::endl;
    std::cout << false << std::endl;
    return 0;
}

This outputs:
1
0
true
false

std:noboolalpha를 이용해 다시 끌 수 있다.


if 문의 소개

부울 변수의 가장 일반적인 용도는 if 문이다. if 문은 아래와 같은 형식을 가진다.

// 형식 1
if (expression) statement1;

or

// 형식 2
if (expression) statement1;
else statement2;

if 문의 표현식(expression)을 조건(condition) 또는 조건 표현식(condition expression)이라고 한다.

위 두 가지 형식 모두 표현식이 평가된다. 만약 표현식이 0이 아닌 값으로 평가되면 statement1이 실행된다. 두 번째 형식에서 표현식이 0으로 평가되면 statement2가 대신 실행된다.

예제 코드를 보자.
if (true) // true is our conditional expression
    std::cout << "The condition is true" << std::endl;
else
    std::cout << "The condition is false" << std::endl;

This outputs:
The condition is true

위 프로그램이 어떻게 동작하는지 살펴보자. 첫 번째로, if 문의 조건 표현식을 평가한다. 표현식 true는 0이 아닌 값 1로 평가되기 때문에 if 아래의 문(statement)이 실행된다.

bool b(false);
if (b)
    std::cout << "b is true" << std::endl;
else
    std::cout << "b is false" << std::endl;

This outputs:
b is false

위 프로그램에서 조건을 평가하면 변수 b가 평가되어 false가 된다. false는 값 0이다. 따라서 if 아래의 문은 실행되지 않지만, else 문이 실행된다.


여러개의 문 실행 (Executing multiple statements)

지금까지의 예제는 기본적인 형식으로, statement1statement2는 하나의 명령문만 실행할 수 있었다. 그러나 중괄호({})를 사용해서 여러 개의 명령문을 실행할 수 있다. 이를 블럭(block)이라고 한다.

if (expression)
{
    statement1a;
    statement1b;
    //  etc
}

or

if (expression)
{
    statement1a;
    statement1b;
    // etc
}
else
{
    statement2a;
    statement2b;
    // etc
}
예제:
if (true)
{ // 아래 블럭의 명령문들이 실행된다.
    std::cout << "The condition is true" << std::endl;
    std::cout << "And that's all, folks!" << std::endl;
}
else
    std::cout << "The condition is false" << std::endl;

This outputs:
The condition is true
And that's all, folks!
좀 더 복잡한 예제:
#include <iostream>

int main()
{
    std::cout << "Enter an integer: ";
    int x;
    std::cin >> x;

    if (x == 0)
        std::cout << "The value is zero" << std::endl;
    else
        std::cout << "The value is non-zero" << std::endl;
    return 0;
}

Enter an integer: 4
The value is non-zero

동등 연산자(==)는 두 정수 값이 같은지 평가한다. 같으면 true를 반환하고 그렇지 않으면 false를 반환한다. 위 프로그램은 첫째, 정수값을 입력받는다. 다음으로, 동등 연산자(==)는 입력한 값이 0과 같은지 평가한다. 위 예제에서 4는 0과 같지 않으므로 false로 평가한다. 이로 인해 if 문을 실행할 경우 else 부분이 실행되어 "The value is non-zero"를 출력한다.


부울 반환 값 (Boolean return values)

부울 값은 어떤 것이 참(true)인지 아닌지 확인하는 함수의 반환 값으로도 사용된다. 이러한 기능을 가진 함수의 이름은 일반적으로 is나 has로 시작한다.

#include <iostream>

// 정수 x와 y의 값이 같으면 true를 반환한다.
bool isEqual(int x, int y)
{
    return (x == y);
}

int main()
{
    std::cout << "Enter an integer: ";
    int x;
    std::cin >> x;

    std::cout << "Enter another integer: ";
    int y;
    std::cin >> y;

    if (isEqual(x, y))
        std::cout << x << " and " << y << " are equal" << std::endl;
    else
        std::cout << x << " and " << y << " are not equal" << std::endl;

    return 0;
}

Enter an integer: 5
Enter another integer: 5
5 and 5 are equal

부울 값 입력 (Inputting boolean values)

std:cin을 사용하여 부울 값을 입력할 수 있다.

int main()
{
    bool b; // uninitialized variable

    std::cout << "Enter a boolean value: ";
    std::cin >> b;

    std::cout << "You entered: " << b;

    return 0;
}

Enter a boolean value: true
You entered: 119

부울 변수는 0 또는 1의 값만 입력이 허용된다. 다른 입력이 있으면 std::cin은 실패한다. 위 프로그램의 경우 "true"를 입력했으므로 std:cin이 자동으로 실패했고, 값을 b에 할당하지 않는다. 따라서 std::cout는 변수 b에 대한 쓰레기 값(= 초기화되지 않은 값: garbage value)을 출력한다.


cpp 번역: 이 포스트의 원문은 http://www.learncpp.com/cpp-tutorial/26-boolean-values/ 입니다.

댓글 로드 중…

블로그 정보

소년코딩 - 소년코딩

소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기

최근에 게시된 이야기