전체 코드

#include <iostream>
using namespace std;

// 불리언 변수 선언
bool isHighLevel = true;    // 참
bool isPlayer = true;       // 참
bool isMale = false;        // 거짓

// 실수 변수 선언
float attackSpeed = -3.375f;      // float 4바이트
double attackSpeed2 = 123.4123;   // double 8바이트

int main()
{
    // 불리언 출력 테스트
    cout << "isHighLevel: " << isHighLevel << endl; // 1 출력 (true)

    // 조건문에서 bool 사용 예제
    if (isMale == false)
    {
        cout << "남자가 아닙니다." << endl;
    }

    // 실수값 출력 테스트
    cout << "Attack Speed (float): " << attackSpeed << endl;
    cout << "Attack Speed (double): " << attackSpeed2 << endl;

    // float, double 비교 위험성 예제 (오차 확인)
    float x = 0.1f + 0.2f;
    float y = 0.3f;

    cout << "0.1 + 0.2 == 0.3? " << (x == y ? "같다" : "다르다") << endl;
    // 오차 때문에 다르다고 나올 가능성 매우 높음

    return 0;
}

📌 1. 불리언(Boolean) 개념 정리

✔️ 정의

  • 불리언(Boolean): 참(true) 또는 거짓(false)만을 가지는 데이터 타입
  • C++에서는 bool로 제공 (C 언어에는 없었음)

✔️ 불리언 선언 및 초기화 예시

bool isHighLevel = true;   // 참 (true)
bool isPlayer = true;      // 참 (true)
bool isMale = false;       // 거짓 (false)

📌 2. 불리언의 메모리 저장 방식

✔️ 실제 저장 방식

  • bool 타입은 1바이트 크기 정수로 저장됨
  • 1비트면 충분하지만, CPU는 최소 단위로 1바이트를 처리하기 때문
  • 실제로는 1바이트 중 최하위 1비트만 사용해서 참/거짓 표현
의미비트 사용
0false0000 0000
1true0000 0001

✔️ 어셈블리 관점에서

  • 어셈블리에는 bool이라는 개념이 없음
  • 단순히 정수 비교로 참/거짓을 판단
int isFemale = 1;  // 참 = 1
if (isFemale) { /* true로 간주 */ }
  • 이런 식으로 int로 처리해도 동작함
  • 하지만 bool을 쓰는 것이 의도 전달과 가독성 측면에서 훨씬 좋음

✔️ 요약 정리

구분설명
타입 이름bool
크기1바이트
표현 값0(false), 1(true)
실제는1바이트 정수 취급
최적화비트 필드(bit field)로 묶어 쓰는 경우도 있음 (후속 강의)

📌 3. 부동소수점(Float, Double) 개념 정리

✔️ 실수란?

  • 정수는 소수점이 없는 수
  • 실수는 소수점이 있는 수 (3.14, -2.718 등)

✔️ 부동소수점(Floating Point)

  • 소수점을 고정 위치가 아니라 유동적 위치로 표현하는 방식
  • 큰 수, 작은 수 모두 표현 가능 (과학적 표기법과 유사)

✔️ 부동소수점 저장 구조

타입총 크기부호지수유효숫자 (Mantissa)
float32비트 (4바이트)1비트8비트23비트
double64비트 (8바이트)1비트11비트52비트

✔️ 저장 예시 -3.375

1) 10진수 -> 2진수 변환
3.375 = 0b11.011

2) 정규화 (Normalization)
0b1.1011 * 2^1

3) 부동소수점 저장
부호 : 1 (음수)
지수 : 1 + Bias(127) = 128 = 0b10000000
유효숫자 : 1011 (나머지 0으로 패딩)
최종 저장 : 0b1 10000000 10110000000000000000000

✔️ float와 double 차이

타입정밀도메모리 크기비고
float약 7자리4바이트연산 속도 빠름
double약 15자리8바이트정밀도 높음

✔️ 부동소수점 주의점

  • 항상 근사값 (정확한 수 저장 불가)
  • 특히 큰 수, 작은 수 섞이면 오차 커짐
  • 실수끼리 == 비교 지양 (오차 때문)
float a = 0.1f + 0.2f;
float b = 0.3f;

if (a == b)  // 위험! 오차로 false일 가능성 높음

✔️ 실수 선언 예시

float attackSpeed = -3.375f;  // 4바이트 (float)
double attackSpeed2 = 123.4123;  // 8바이트 (double)

📌 5. 요점 정리 표

타입크기저장 방식비고
bool1바이트1비트만 사용 (나머지는 패딩)참/거짓
float4바이트부호+지수+유효숫자단정밀도 (Single Precision)
double8바이트부호+지수+유효숫자배정밀도 (Double Precision)

📌 6. 실전 팁 요약

상황추천 타입
참/거짓bool
실수 간단 계산float
높은 정밀도 필요double
메모리 절약 필요float
실수 직접 비교지양 (근사값 특성)

📌 7. 디버깅 꿀팁

작업단축키
디버깅 시작F5
브레이크포인트 설정F9
디스어셈블리 보기Ctrl+Alt+D
메모리 보기Ctrl+Alt+M

📌 최종 결론

✅ 불리언: 1바이트 정수, 가독성 위해 bool 사용
✅ 부동소수점: 근사값 저장, 정밀도 주의
✅ 실수 비교는 == 지양, 오차 허용범위 감안한 비교 필요
✅ 실수 저장 방식, 정규화 과정 완벽 숙지 필수


필요하시면 이 자료 PDF로 변환해 드릴 수도 있습니다!
다음 강의 주제도 이렇게 꼼꼼히 정리해드릴까요?
추가 궁금한 거 바로 물어보셔도 됩니다! 💪✨

profile
李家네_공부방

0개의 댓글