유니티와 C#을 공부하면서 이미 배웠던 내용들이지만 C++ 공부를 시작하며 기본부터 다시 다져가려고 한다.
그래서 오늘 공부한 부분을 한번 정리해보려고 한다.
자료형은 크게 두가지로 나눈다.
(자주 쓰이는것들만 정리)
정수형: char(1), short(2), int(4), long(4), long long(8)
실수형: float(4), double(8)
자료형은 변수가 어떠한 형태를 가지고 있는지 설명해주는 역할이다.
괄호안에 있는 숫자는 자료형의 크기(단위, byte)를 나타낸 것이다.
(1byte == 8bit)
그렇다면 자료형을 크기로 나눈 이유가 뭘까 ?
간단하게 두가지로 나눌 수 있다.
첫번째는 효율성이다.
예를 들어 char(1byte)만 사용해도 되는 데이터를 int(4byte)로 저장했다고 생각해보자
상상만해도 멍청한짓이지 않은가 ?
특히 배열, 리스트 등 대규모 데이터를 처리할 때 더욱 조심해야한다.
두번째는 성능 최적화이다.
CPU는 데이터크기가 작을수록 데이터를 더 빠르게 읽고 처리할 수 있다.
자료형이 작을수록 CPU 캐시 메모리 효율이 높아지고 반복연산 및 데이터 복사 작업에서 성능 이점이 있다.
실수형의 경우에는 정밀도가 기준이 되는 경우도 있다.
대략적인 계산에는 float(단정밀도), 정밀한 계산(과학적연산 등)에는 double(배정밀도)를 사용한다.
여기서 말하는 정밀도에 대해선 아래의 표를 보고나서 더 설명해주겠다.
char | 1 | -128 ~ 127 | 0 ~ 255 | 문자, 작은 정수 |
short | 2 | -32,768 ~ 32,767 | 0 ~ 65,535 | 메모리 최적화 정수 |
int | 4 | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 | 일반적인 정수 연산 |
long | 4 | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 | 큰 정수 |
long long | 8 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 0 ~ 18,446,744,073,709,551,615 | 매우 큰 정수 |
float | 4 | ±1.5 × 10^-45 ~ ±3.4 × 10^38 | N/A | 단정밀도 실수 계산 |
double | 8 | ±5.0 × 10^-324 ~ ±1.7 × 10^308 | N/A | 배정밀도 실수 계산 |
정밀도란 ?
숫자를 얼마나 정확하게 표현할 수 있는지를 나타내는것이다.
실수를 표현할때 컴퓨터는 *이진 부동소수점 표현 방식* 을 사용한다.
예를 들면 0.1은 2진수로 *무한소수(0.000110011001100110011....)* 이런식으로 나온다.
(0.1f 를 10번 더하면 1이 아닌 0.9999999 같은 식으로 나옴)
그래서 정해진 범위 까지만 계산을 한다.
이 정해진 범위를 정밀도 라고 표현한다.