스몰토크, 파이썬과 같은 일부 언어에서는 실행중에 타입을 검사하는데, 이와 대조적으로 C++는 정적타입 언어이므로 컴파일중에 타입을 검사한다. 그러므로 컴파일러에서는 프로그램에서 사용하는 모든 이름의 타입을 알아야 한다.

2.1.1 산술 타입

image.png

문자 타입은 대부분 국제화를 제원하기 위한 것.

wchar_t, char16_t, char32_t는 확장 문자 집합에 사용한다. wchar_t는 해당 시스템의 가장 큰 확장 문자 집합에 속한 문자를 담기에 충분할 정도로 크다는것을 보장한다.

char16_t와 char32_t는 유니코드문자 처리를 위한 표준 타입으로, UTF-16과 UTF-32인코딩을 지원한다. UTF-32는 모든 유니코드 문자를 하나의 코드 유닛으로 표현할 수 있어 처리가 간단하지만 메모리 사용량이 많고, UTF-16은 메모리 효율적이지만 서로 게이트 쌍 처리가 복잡하다.

(서로게이트 쌍 (Surrogate Pair) : UTF-16에서 기본 다국어 평면(BMP)를 벗어나는 유니코드 문자를 표현하기 위해 두개의 16비트 코드 유닛을 사용하는 방식)

시스템 수준에서 내장 타입을 나타내는 법

컴퓨터는 데이터를 00010101010101010 처럼 0과 1의 비트열로 저장한다.

대부분의 컴퓨터는 메모리를 2의제곱 크기인 비트 덩어리(chunk)로 다룬다. 주소를 붙일 수 있는 메모리 중 가장 작은 덩어리를 바이트(byte)라고 한다. 기본 저장 단위는 word라고 하는데 일반적으로 적은 바이트 수를 사용한다.

(워드는 프로세서 아키텍쳐에 따라 달라진다. 32비트 시스템의 경우 32비트, 64비트 시스템의 경우 64비트.)

타입 변환

— 정수 값을 부동소수점 타입에 대입하면 소수부는 0이된다. 부동소수점 객체에서 처리할 수 있는 것보다 정수의 비트수가 더 많으면 정밀도 손실이 발생할 수 있다.

— 부호 없는 타입 객체에 범위를 벗어난 값을 대입했으르 떄 결과는 그 타입에서 담을 수 있는 값으로 나머지 연산을 적용한 값이다.8비트 unsigend char에 표현범위 이상을 넣으면 256으로 나머지 연산을 적용한 결과를 대입한다. 그러므로 8비트 unsigned char에 -1을 대입하면 그 객체 값은 255가 된다.

— 부호 있는 타입 객체에 범위를 벗어난 값을 대입하면 결과는 미정의다. (보장X) 프로그램이 동작하는 것처럼 보일수도 있고, 충돌하거나 쓰레기 값을 만들어 낼 수도 있다.

부호없는 타입을 포함한 표현식

unsigned와 int값을 함께 사용하면 int값은 unsigned로 변환된다. 따라서, 부호있는 타입과 부호없는 타입을 섞어 쓰는것을 금지한다.