wellcome_공부일기

C++ | 02.06 Boolean 자료형과 조건문 if 본문

프로그래밍/C++

C++ | 02.06 Boolean 자료형과 조건문 if

ma_heroine 2020. 5. 7. 17:01

<목차>

1. Boolean 자료형과 그 변수(Boolean variables)

2. Boolean 변수 출력하기(Printing Boolean variables)

3. 정수를 불린으로 변환하기(Integer to Boolean conversion)

4. 불린 값 입력하기(Inputting Boolean values)

5. 불린 리턴값(Boolean return values)

6. 연산자를 이용한 Boolean 자료형

7. 연습문제

 

 

Boolean 자료형과 그 변수(Boolean variables)

Boolean은 발명가인 George Boole으로부터 이름을 따온 이름입니다.

Boolean 변수는 true와 false 두개의 값만 취할 수 있습니다.

컴퓨터 입장에서는 1이냐 0이냐로 판단할 수 있습니다.(true는 1, false는 0)

Boolean 변수를 선언하기 위해서는 bool 키워드를 사용합니다.

bool b;

true or false 값을 Boolean 변수에 초기화(initialize) 혹은 대입(assign)하기 위해서는, truefalse 키워드를 사용합니다.

bool b1 = false;   //copy initialization
bool b1 ( true );  //direct initialization
bool b2 { false }; //uniform initialization
b1 = false;
bool b3 {}; // default initialize to false

 

logical NOT 연산자(!)은  Boolean 변수의 값을 뒤바꿀 때 사용됩니다.

bool b1 { !true }; // b1 will be initialized with the value false
bool b2 { !false }; // b2 will be initialized with the value true

- Boolean 값은 실제로 "참" 또는 "거짓"이라는 단어로 부울 변수에 저장되지 않습니다.

- 대신, Boolean 은 정수로 저장됩니다.

- true은 정수 1이 되고, false은 정수 0이 됩니다.

- 마찬가지로, 컴파일러가 Boolean 값을 평가할 때 실제로 "true" 또는 "false"로 코드가 타이핑되어 있어도 "true" 또는 "false"로 평가하지 않고 0(거짓) 또는 1(참)으로 평가하고 또한 출력도 0과 1이 나옵니다.

- boolalpha를 사용하면 "true" 또는 "false"를 출력할 수 있습니다.

- Boolean은 메모리에 정수를 저장하기 때문에, 일체형 타입(integral type)으로 간주됩니다.

- 일체형 타입(integral type)이란 기본 값이 정수로 저장되고 크기가 1바이트로 보장된다는 것을 의미합니다.

 

 

Boolean 변수 출력하기(Printing Boolean variables)

우리가 Boolean 값을 출력할 때, std::cout은 0 혹은 1을 출력합니다.

#include <iostream>
 
int main()
{
    std::cout << true << '\n'; // true evaluates to 1
    std::cout << !true << '\n'; // !true evaluates to 0
 
    bool b{false};
    std::cout << b << '\n'; // b is false, which evaluates to 0
    std::cout << !b << '\n'; // !b is true, which evaluates to 1
    return 0;
}

 

- 만약 0과 1이 아닌 "true" 혹은 "false"로 출력하고 싶다면, std::boolalpha를 이용하면 됩니다. 

#include <iostream>
 
int main()
{
    std::cout << true << '\n';
    std::cout << false << '\n';
 
    std::cout << std::boolalpha; // print bools as true or false
 
    std::cout << true << '\n';
    std::cout << false << '\n';
    return 0;
}

- 0과 1을 출력해주는 noboolalpha도 있습니다. 

 

정수를 불린으로 변환하기(Integer to Boolean conversion)

Boolean 자료형은 uniform initialization을 이용하면서 정수로 초기화할 수 없습니다. 

#include <iostream>
 
int main()
{
	bool b{ 4 }; // error: narrowing conversions disallowed
	std::cout << b;
	
	return 0;
}

 

하지만, 어떤 문맥에서는 정수가 Boolean 값으로 변형될 수 있습니다.

정수 0이 false로 변환되고, 그 외는 다 true로 변환됩니다.

#include <iostream>
 
int main()
{
	std::cout << std::boolalpha; // print bools as true or false
 
	bool b1 = 4 ; // copy initialization allows implicit conversion from int to bool
	std::cout << b1 << '\n';
 
	bool b2 = 0 ; // copy initialization allows implicit conversion from int to bool
	std::cout << b2 << '\n';
 
	
	return 0;
}

 

 

불린 값 넣기(Inputting Boolean values)

int main()
{
    bool b {}; // default initialize to false (0)
    std::cout << "Enter a boolean value: ";
    std::cin >> b;
    std::cout << "You entered: " << b;

    return 0;
}

- std::cin은 불린 변수의 숫자 0과 1, 두개의 값만 받습니다.

- 0이 아닌 std::cin은 항상 false로 간주하여 true 혹은 false를 입력해도 0이 나옵니다. 

 

 

불린 리턴값(Boolean return values)

Boolean 함수는 리턴값도 Boolean값으로 받는다. 

#include <iostream>

using namespace std;

bool isEqual(int a, int b)
{
    bool result = (a==b);

    return result;
}
int main()
{
    cout << std::boolalpha;
    cout << isEqual(1,1) <<endl;
    cout << isEqual(0,3) <<endl;

    if (5) 
    {
        cout << "True" << endl;
    }
    else
    {
        cout << "False" <<endl;
    }
    return 0;
}

- if문에 0이 아니면 다 true로 간주함으로, 위의 이론을 응용하여 5를 넣었습니다. 하지만 true로 써야 좋습니다.

 

 

 연산자를 이용한 Boolean 자료형

- &&(and)연산자와 ||(or)연산자 결과

#include <iostream>


using namespace std;

int main()
{
    cout << (true && true)   << endl; //output: 1
    cout << (true && false)  << endl; //output: 0
    cout << (false && true)  << endl; //output: 0
    cout << (false && false) << endl; //output: 0

    cout << (true || true)   << endl;  //output: 1
    cout << (true || false)  << endl;  //output: 1
    cout << (false || true)  << endl;  //output: 1
    cout << (false || false) << endl;  //output: 0

    return 0;
}

 

- if문을 이용한 Boolean 출력

#include <iostream>


using namespace std;

int main()
{

    if (3>1)
        cout << "This is true" << endl; 
    else 
        cout << "This is false" << endl;

    return 0;
}

- if 괄호가 true or false일때에 따라 다음 문장이 실행되고, 실행되지 않습니다.

-  true or false는 연산 계산도 포함됩니다. 

 

 

연습문제 

정수 하나를 입력받고 그 숫자가 홀수인지 짝수인지 출력하는 프로그램을 만들어봅시다. 

#include <iostream>

int main()
{
    using namespace std;

    int x;
    cin >> x;

    if ( x%2 == 1 )
        cout << "This is odd" << endl;
    else
        cout << "This is not odd" << endl;
    return 0;
}

 

- 삼항 연산자(조건 연산자)를 이용하면 한줄로 프로그램을 짤 수 있습니다!

#include <iostream>

using namespace std;

int main()
{
    int x;
    cin >> x;

    cout<< (x%2==0 ? true : false) << endl;

    return 0;
}

 

 

 

 

 

 

 

 

 

* 위 포스팅은 홍정모님의 따라 배우는 C++과 learncpp에서 공부한 토대로 작성하였습니다.

Comments