프로그래밍/C

불리언과 부동소수점

우대비 2022. 8. 15. 13:57
반응형

불리언 : 참 / 거짓

사실 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개를 == 으로 비교하는 것은 지양

 

반응형
LIST

'프로그래밍 > C' 카테고리의 다른 글

x = 1; cout << ++x << x++ << --x; 출력 = 202 ? ? ? ?? ? ??  (0) 2022.09.01
const ptr  (0) 2022.08.30
문자와 문자열  (0) 2022.08.15