C++ Fundamental Data Type
#string 타입은 Fundamental Data Type이 아님. std 라이브러리에 속해있는 것.
#signed는 음의 정수와, 0, 양의 정수를 포함.
#unsigned 는 0, 양의 정수를 포함하되, 음의 정수는 포함하지 않음.
왜 ? - 저장되는 방식이 다르기 때문에, unsigned가 계산에 빠른 특징이 있음.
C++ 의 변수 초기화 방법
C++에서 변수를 초기화하는 방법은 3가지다.
1. copy initialization
2. direct initialization
3. uniform initialization
int value = 0; // copy initialization
int value(0); // direct initialization
int value{ 0 }; // uniform initialization
차이점
- 데이터 타입이 안 맞을 경우, uniform initialization 은 엄격한 편.
copy 와 direct 는 경고만 해주고 컴파일링함.
int 는 정수형이기 때문에, 리터럴 값의 알맞은 타입이 아니다.
copy 와 direct 는 "possible loss of data" 와 같은 경고를 하며, 리터럴 데이터가 손실될 수 있다고 한다.
즉, 소수점은 제외한 3의 값만 담는 것이다.
이와 다르게 uniform은 에러가 뜨며, 컴파일이 안된다.
데이터 타입 저장 크기 / 오버플로우
short integer 데이터 타입은 16bit의 크기, 즉 2bytes (8 bit = 1 byte) 크기를 가진다.
short 데이터 타입에 담을 수 있는 최대 값, 최소 값 ( -32767 ~ 32767 ) 이다.
overflow
그럼, short 최대 값에서 초과할 경우 어떻게 되는가 ?
데이터 타입의 최대 값을 넘을 경우에는, 데이터 타입의 최소 값으로 넘어간다.
최소 값에서 더 내려가도, 데이터 타입의 최대 값으로 넘어간다.
이러한 현상을 overflow 라고 한다.
*예시
C++ 11 고정 너비 정수 (Fixed-width Integers)
C++에서는 데이터 타입의 크기를 최소 크기만을 규정하고 있기 때문에, 플랫폼, 컴파일마다 구현된 크기가 다를 수 있다. integer가 2 byte였다가, 4 byte 인것처럼.
플랫폼마다 크기가 다르면 불확실성을 가질 수 있기 때문에 C++ 11버전에서는 어떤 플랫폼이던간에 같은 데이터 크기를 사용할 수 있는 '고정 너비 정수' 가 채택됐다.
int16_t 일 경우, int 타입 중에 16 bit ( 2 byte ) 짜리 데이터 타입 ( short ) 을 사용하겠다는 것이다. int_fast8_t 일 경우, int 타입 중에 가장 빠른 8 bit ( 1 byte ) 짜리 데이터 타입 ( char ) 을 사용하는 것이다.
이미지 출처
https://www.cplusplus.com/doc/tutorial/variables/
'Coding > C++' 카테고리의 다른 글
[ C++ ] 02.08 상수 constants (0) | 2022.01.18 |
---|---|
[ C++ ] 02.05 - 부동 소수점 숫자 ( floating point numbers ) (0) | 2022.01.14 |
[ C++ ] namespace_명칭공간 (0) | 2022.01.12 |
[ C++ ] 헤더 파일 / 헤더 가드 (0) | 2022.01.12 |
[ C++ ] 선언과 정의의 분리 (0) | 2022.01.12 |