불리언 : 참 / 거짓
사실 bool은 그냥 1바이트 정수에 불과함
true = 1, false = 0
1비트가 아니라 왜 1바이트를 사용하는가
-> 레지스터도 최소단위가 1바이트 이기에 이것도 1바이트로 잡혔다고 보는게 타당
실수 (부동소수점)
3.1415926535 = 0.31415926535 * 10 = 314.15926535 * 10^-2
1) 정규화 = 0.31415926535 * 10
2) 31415926535 (유효숫자) 1 (지수)
float 부호(1) 지수(8) 유효숫자(23) = 32비트 = 4바이트
double 부호(1) 지수(11) 유효숫자(52) = 64비트 = 8비트
float attackSpeed = -3.375f; // 4byte
double attackSpeed2 = 123.4123; // 8byte
ex) -3.375라는 값은 2진수로 어떻게 저장될까
0.5 = 0.1
0.25 = 0.01
0.125 = 0.001
0.0625 = 0.0001
375 = 0.25 + 0.125 = 0.011
1) 2진수 변환 = -0b11.011
2) 정규화 0b.1.1011 * 2^1
1(부호) 1(지수) 1011(유효숫자)
단 지수는 unsigned byte라고 가정하고 숫자+127 만들어줌
예상 결과 : 0b 1,100 0000 0,101 1000 0000 0000 0000 0000
attackSpeed 변수의 주소값을 조사식에서 알아낸후
메모리에 검색해보면 값이 나옴
16진수로 되어있는 이 값을 2진수로 변환해보면 예상 결과와 같은 수가 있는걸 볼 수 있음
프로그래밍할 때 부동소수점은 항상 '근사값' 이라는 것을 기억
1/3 = 0.33333333333333........
// 특히 수가 커질 수록 오차 범위도 매우 커짐
// 실수 2개를 == 으로 비교하는 것은 지양
'프로그래밍 > C' 카테고리의 다른 글
x = 1; cout << ++x << x++ << --x; 출력 = 202 ? ? ? ?? ? ?? (0) | 2022.09.01 |
---|---|
const ptr (0) | 2022.08.30 |
문자와 문자열 (0) | 2022.08.15 |