전체 코드
#include <iostream>
using namespace std;
bool isHighLevel = true;
bool isPlayer = true;
bool isMale = false;
float attackSpeed = -3.375f;
double attackSpeed2 = 123.4123;
int main()
{
cout << "isHighLevel: " << isHighLevel << endl;
if (isMale == false)
{
cout << "남자가 아닙니다." << endl;
}
cout << "Attack Speed (float): " << attackSpeed << endl;
cout << "Attack Speed (double): " << attackSpeed2 << endl;
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;
bool isPlayer = true;
bool isMale = false;
📌 2. 불리언의 메모리 저장 방식
✔️ 실제 저장 방식
bool 타입은 1바이트 크기 정수로 저장됨
- 1비트면 충분하지만, CPU는 최소 단위로 1바이트를 처리하기 때문
- 실제로는 1바이트 중 최하위 1비트만 사용해서 참/거짓 표현
| 값 | 의미 | 비트 사용 |
|---|
| 0 | false | 0000 0000 |
| 1 | true | 0000 0001 |
✔️ 어셈블리 관점에서
- 어셈블리에는
bool이라는 개념이 없음
- 단순히 정수 비교로 참/거짓을 판단
int isFemale = 1;
if (isFemale) { }
- 이런 식으로
int로 처리해도 동작함
- 하지만
bool을 쓰는 것이 의도 전달과 가독성 측면에서 훨씬 좋음
✔️ 요약 정리
| 구분 | 설명 |
|---|
| 타입 이름 | bool |
| 크기 | 1바이트 |
| 표현 값 | 0(false), 1(true) |
| 실제는 | 1바이트 정수 취급 |
| 최적화 | 비트 필드(bit field)로 묶어 쓰는 경우도 있음 (후속 강의) |
📌 3. 부동소수점(Float, Double) 개념 정리
✔️ 실수란?
- 정수는 소수점이 없는 수
- 실수는 소수점이 있는 수 (3.14, -2.718 등)
✔️ 부동소수점(Floating Point)
- 소수점을 고정 위치가 아니라 유동적 위치로 표현하는 방식
- 큰 수, 작은 수 모두 표현 가능 (과학적 표기법과 유사)
✔️ 부동소수점 저장 구조
| 타입 | 총 크기 | 부호 | 지수 | 유효숫자 (Mantissa) |
|---|
| float | 32비트 (4바이트) | 1비트 | 8비트 | 23비트 |
| double | 64비트 (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)
✔️ 실수 선언 예시
float attackSpeed = -3.375f;
double attackSpeed2 = 123.4123;
📌 5. 요점 정리 표
| 타입 | 크기 | 저장 방식 | 비고 |
|---|
| bool | 1바이트 | 1비트만 사용 (나머지는 패딩) | 참/거짓 |
| float | 4바이트 | 부호+지수+유효숫자 | 단정밀도 (Single Precision) |
| double | 8바이트 | 부호+지수+유효숫자 | 배정밀도 (Double Precision) |
📌 6. 실전 팁 요약
| 상황 | 추천 타입 |
|---|
| 참/거짓 | bool |
| 실수 간단 계산 | float |
| 높은 정밀도 필요 | double |
| 메모리 절약 필요 | float |
| 실수 직접 비교 | 지양 (근사값 특성) |
📌 7. 디버깅 꿀팁
| 작업 | 단축키 |
|---|
| 디버깅 시작 | F5 |
| 브레이크포인트 설정 | F9 |
| 디스어셈블리 보기 | Ctrl+Alt+D |
| 메모리 보기 | Ctrl+Alt+M |
📌 최종 결론
✅ 불리언: 1바이트 정수, 가독성 위해 bool 사용
✅ 부동소수점: 근사값 저장, 정밀도 주의
✅ 실수 비교는 == 지양, 오차 허용범위 감안한 비교 필요
✅ 실수 저장 방식, 정규화 과정 완벽 숙지 필수
필요하시면 이 자료 PDF로 변환해 드릴 수도 있습니다!
다음 강의 주제도 이렇게 꼼꼼히 정리해드릴까요?
추가 궁금한 거 바로 물어보셔도 됩니다! 💪✨