[C++] 자료형

네,가능합니다 ㅣ 2024. 12. 1. 22:41

유니티와 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 같은 식으로 나옴)

 

그래서 정해진 범위 까지만 계산을 한다.

정해진 범위정밀도 라고 표현한다.