int -> float가 “비트 재해석”이 아니라 값 변환임을 설명할 수 있다.(float&)a 같은 C-Style 강제 캐스팅이 왜 위험한지 설명할 수 있다.int a = 10;
float b = static_cast<float>(a); // 10 -> 10.0f
int big = 70000;
short s = static_cast<short>(big); // 축소 변환: 값 손실/변형 가능
핵심:
int -> float는 값 10을 부동소수점 10.0으로 바꾸는 값 변환입니다.int a = 123;
float& f = (float&)a; // 컴파일은 될 수 있어도, 동작은 안전하지 않음(UB 가능)
이런 캐스팅은:
실전 기준:
float x = 123; // 암시적
float y = static_cast<float>(123); // 명시적(의도 명확)
학습 포인트:
(float)a보다 C++ 스타일 static_cast<float>(a)가 의도가 더 분명하고,int hp = 100;
int maxHp = 200;
float ratio1 = hp / maxHp; // 0 (int / int)
float ratio2 = static_cast<float>(hp) / maxHp; // 0.5 (float / int)
핵심:
float로 바꿔야 합니다.int -> float와 (float&)a는 무엇이 다를까? (값 변환 vs 해석 변경)hp / maxHp가 0이 되는 이유는?