크기 : 1바이트
사용처 : True or False
bool isHighLevel = true;
bool isPlayer = true;
bool isMale = false;
int isFemale = 1;
참/거짓은 위처럼 int형도 사용 가능하다. 하지만 메모리 낭비이기 때문에 bool을 사용한다. (그러면 1bit를 사용하지 않고 1byte를 사용하는 이유는? --> 1bit만 가져오는건 없다. 최소 단위가 1byte라서 그런다. 어셈블리에서도 al이 최소였던걸 기억해보자.)
크기 : 4바이트 or 8바이트
사용 : 소수점을 표현할 때 사용
부동 : 뜰 부(浮) 움직일 동(動) 을 사용해서 움직이는 소수점이라는 뜻
메모리에 저장할때 우리는 01 밖에 존재하지 않는다. 점을 표현할 수 가 없다. 그래서 점을 표현하는 방법을 만들었다.
Q1 - 임이의 위치를 점으로 가정하고 앞 뒤를 나누면?
A1 - 예를 들어 32비트이면 앞에 16비트는 정수 뒤에 16비트는 소수로 가정한다. --> (0~65535).(0~65535) 밖에 사용을 못함. 즉 효율적이지 못하다.
그래서 다음과 같이 사용된다.
float 부호(1) 지수(8) 유효숫자(23) = 32비트 = 4바이트
double 부호(1) 지수(11) 유효숫자(52) = 64비트 = 8바이트
부동소수점을 사용하기 위하여 우리는 정규화를 시킨다.
정규화란 데이터 형태가 다양하게 들어와도 우리가 정해놓은 규칙으로 변환하는 것을 말한다.
float attackSpeed = -3.375f; // 4바이트
double attackSpeed2 = 123.4123; // 8바이트
// flaot를 기준으로 사용된 예시이다.
// ex) -3.375라는 값을 저장
// 1) 2진수 변환 = (3) + (0.375) = 0b11 + 0b0.011 = 0b11.011
// 0.375 = 0.5*0 + 0.25*1 + 0.125*1 = 0b0.011
// 2) 정규화 0b11.011 *2^1
// 1(부호) 1(지수) 1011(유효숫자)
// 단 지수는 unsigned byte라고 가정하고 숫자+127 만들어줌
// 예상 결과 : 0b 1 10000000 1011000'0000'0000'0000'0000
// 부호 지수(1+127) 유효숫자
부동 소수점을 사용할 땐 아래 주의를 기억하자
프로그래밍할 때 부동소수점은 항상 '근사값'이라는 것을 기억
특히 수가 커질수록 오차 범위도 매우 커짐
실수 2개를 == 으로 비교하는 것은 지양
오늘은 여기까지
이전에 재밌게 봤던 코딩애플님의 0.1 + 1.1 == 1.2 는 틀린수식이다. 라는 내용이 다시한번 기억났다. 내가 일을 하며 경험한 것은 실수를 비교하는 상황이 되면정수화시킨 후에 비교를 해야한다 라는 것이다. 왜 그래야하는지는 코딩애플님 유튜브에 자세하게 설명이 되어있다. 참고해도 좋다. -끝-
ref : 코딩애플