65라는 값을 할당한다면, 이 값은 0100 0001이라는 비트 순서로 변환되어 해당 객체에 할당된 메모리에 저장됩니다.0100 0001이 다시 값 65로 변환되는 것이죠.
기본 자료형(fundamental data types)
- 가장 기초적이고 필수적인 자료형을 제공합니다.
int, double, char, bool…
복합 자료형(compound data types)
- 기본 자료형을 조합해서 만들거나, “형태”가 더 복잡한 타입들 입니다.
int*, int&, struct Point, enum Color…
C++ 표준 라이브러리 자료형(C++ standard library)
- 표준 라이브러리는 모든 C++ 배포판에 포함되어 있으므로, 이 타입들은 광범위하게 사용 가능하며 호환성을 위해 표준화되어 있습니다.
- 표준 라이브러리의 타입을 사용하려면 적절한 헤더를 포함(include)하고 표준 라이브러리를 링크해야 합니다.
std::string, std::vector<int>, std::map<...>, std::unique_ptr<...>…

| Types | Category | Meaning | Example |
|---|---|---|---|
floatdoublelong double | Floating Point | a number with a fractional part | 3.14159 |
bool | Integral (Boolean) | true or false | true |
charwchar_tchar8_t (C++20)char16_t (C++11)char32_t (C++11) | Integral (Character) | a single character of text | 'c' |
short intintlong intlong long int (C++11) | Integral (Integer) | positive and negative whole numbers, including 0 | 64 |
std::nullptr_t (C++11) | Null Pointer | a null pointer | nullptr |
void | Void | no type | n/a |
short int long long longbool 다양한 char 타입들 표준 정수 타입표준 정수 타입만이 정수 값(숫자)으로 표시됩니다.정수형 타입이라는 용어는 오직 기본 자료형만을 포함한다는 점에 유의하세요. enum이나 enum class 같은 비(非)기본 자료형은 정수형 타입이 아니라는 것을 의미합니다.std::nullptr_t 같이 새로운 버전의 C++에서 정의된 많은 타입들은 _t 접미사를 사용합니다.타입(type)을 의미하며, 현대적인 타입들에 적용되는 일반적인 명칭법입니다._t가 붙은 무언가를 본다면, 그것은 아마도 타입일 것입니다. _t 접미사를 가지고 있지 않으므로, 이것이 일관되게 적용되는 규칙은 아닙니다.타입 없음(no type)을 의미합니다.char short int long long long 은 각각 최소 8 16 16 32 64비트의 크기를 가집니다.char와 char8_t는 정확히 1바이트입니다.| 분류 | 자료형 (Type) | 최소 크기 (Minimum Size) | 일반적인 크기 (Typical Size) |
|---|---|---|---|
| 불리언 (Boolean) | bool | 1 byte | 1 byte |
| 문자 (Character) | char | 1 byte (exactly) | 1 byte |
| 문자 (Character) | wchar_t | 1 byte | 2 or 4 bytes |
| 문자 (Character) | char8_t | 1 byte | 1 byte |
| 문자 (Character) | char16_t | 2 bytes | 2 bytes |
| 문자 (Character) | char32_t | 4 bytes | 4 bytes |
| 정수 (Integral) | short | 2 bytes | 2 bytes |
| 정수 (Integral) | int | 2 bytes | 4 bytes |
| 정수 (Integral) | long | 4 bytes | 4 or 8 bytes |
| 정수 (Integral) | long long | 8 bytes | 8 bytes |
| 부동 소수점 (Floating point) | float | 4 bytes | 4 bytes |
| 부동 소수점 (Floating point) | double | 8 bytes | 8 bytes |
| 부동 소수점 (Floating point) | long double | 8 bytes | 8, 12, or 16 bytes |
| 포인터 (Pointer) | std::nullptr_t | 4 bytes | 4 or 8 bytes |
sizeof라는 연산자를 제공합니다.sizeof 연산자는 자료형이나 변수를 받아, 해당 자료형의 객체 크기를 바이트 단위로 반환하는 단항 연산자(unary operator)입니다.280은 1바이트 범위인 0~255에 담기에 너무 큽니다.256입니다.280을 256으로 나누면 몫은 1이고 나머지는 24가 됩니다.24가 저장됩니다.unsigned short 타입의 가장 큰 수는 65535입니다.0은 2바이트 부호 없는 정수로 표현 가능하므로 괜찮습니다.-1은 표현할 수 없으므로 범위의 맨 끝(최댓값)으로 래핑되어 값 65535를 생성합니다.-2는 65534가 됩니다. 이런 식으로 계속됩니다.signed 값은 0에서 멀리 떨어진 값들이 범위의 끝에 있기 때문에 실수로 범위의 위나 아래를 넘기기 쉽지 않습니다.unsigned 숫자는 범위의 시작이 0이고, 대다수의 값이 0 근처에 있기 때문에 범위의 하단을 넘겨 오버플로우 시키기가 훨씬 쉽습니다.부호 있는 정수 와 부호 없는 정수를 섞어서 사용할 때 예상치 못한 동작이 발생할 수 있습니다.Best Practice
- 음수가 아니어야 하는 수량일지라도 저장하거나 수학적 연산을 할 때는 부호 없는 숫자보다 부호 있는 숫자를 선호하십시오.
부호 있는 숫자와부호 없는 숫자를 섞어서 사용하지 마십시오.
<cstdint> 헤더에 다음과 같이 정의되어 있습니다.| 이름 | 고정 크기 | 고정 범위 | 비고 |
|---|---|---|---|
std::int8_t | 1 byte (signed) | -128 ~ 127 | 많은 시스템에서 signed char처럼 취급됨. 아래 참고. |
std::uint8_t | 1 byte (unsigned) | 0 ~ 255 | 많은 시스템에서 unsigned char처럼 취급됨. 아래 참고. |
std::int16_t | 2 byte (signed) | -32,768 ~ 32,767 | |
std::uint16_t | 2 byte (unsigned) | 0 ~ 65,535 | |
std::int32_t | 4 byte (signed) | -2,147,483,648 ~ 2,147,483,647 | |
std::uint32_t | 4 byte (unsigned) | 0 ~ 4,294,967,295 | |
std::int64_t | 8 byte (signed) | -9,223,372,036,854,775,808 ~ ... | (매우 큰 값) |
std::uint64_t | 8 byte (unsigned) | 0 ~ 18,446,744,073,709,551,615 |
std::int_fast#_t 및 std::uint_fast#_t# 비트의 크기를 가지면서 가장 빠른 부호 있는/없는 정수 타입을 제공합니다. (# = 8 16 32 64)std::int_fast32_t는 32비트 이상인 정수 중 가장 빠른 타입을 제공합니다. std::int_least#_t 및 std::uint_least#_t# 비트의 크기를 가지면서 가장 작은 부호 있는/없는 정수 타입을 제공합니다. (# = 8 16 32 64)std::uint_least32_t는 32비트 이상인 정수 중 가장 작은 타입을 제공합니다.

e (또는 간혹 E)라는 문자를 사용하여 "10의 거듭제곱" 부분을 표현합니다.0에서 시작합니다.0 (가수의 왼쪽 끝에 있는 0) 을 잘라냅니다.4320.0 -3.33 0.01226 과 같이 소수 부분이 있는 숫자를 저장할 수 있는 변수입니다.signed 부호가 있습니다.float 은 6~9자리의 정밀도를 가집니다.float가 최대 6자리의 유효 숫자를 가진 어떤 숫자든 정확하게 표현할 수 있음을 의미합니다.7~9자리의 유효 숫자를 가진 숫자는, 값에 따라 정확하게 표현될 수도 있고 아닐 수도 있습니다.9자리 이상의 정밀도를 가진 숫자는 확실히 정확하게 표현되지 않습니다.double 값은 15~18자리의 정밀도를 가지며, 대부분의 double 값은 적어도 16자리의 유효 숫자를 가집니다.long double은 차지하는 바이트 수에 따라 최소 15 18 또는 33 자리의 유효 숫자를 가집니다.std::setprecision()이라는 출력 조정자 함수를 사용하여 std::cout이 보여주는 기본 정밀도를 재설정할 수 있습니다.<iomanip> 헤더에 정의되어 있습니다.
true 와 false 두 가지 값만 가질 수 있는 변수입니다.bool 키워드를 사용합니다.0은 false 로 변환되고, 그 외의 모든 정수는 true로 변환됩니다.false 입니다.bool b;
true와 false 키워드를 사용합니다.bool b1 { true };
bool b2 { false };
b1 = false;
bool b3 {}; // 기본값인 false로 초기화됨
true 나 false라는 단어로 저장되지 않고, 정수값으로 저장됩니다.true는 정수 1로, false는 정수 0으로 저장됩니다.std::cout이 0이나 1 대신 true나 false를 출력하게 하려면 std::boolalpha를 출력하면 됩니다.std::cout이 bool 값을 출력하는 방식을 변경합니다.#include <iostream>
int main()
{
std::cout << true << '\n';
std::cout << false << '\n';
std::cout << std::boolalpha; // bool 값을 true 또는 false로 출력하게 설정
std::cout << true << '\n';
std::cout << false << '\n';
return 0;
}
1 0 true false
std::noboolalpha를 사용하면 설정을 다시 끌 수 있습니다.
char 기본 자료형은 단 하나의 문자를 저장하기 위해 설계되었습니다.글자 한 자 숫자 기호 또는 공백 등이 될 수 있습니다.char 데이터 타입은 정수형입니다.char 변수에 저장된 정수는 ASCII 문자로 해석됩니다.char 변수를 초기화할 수 있습니다.char ch2{ 'a' }; // 'a'의 코드 포인트로 초기화 (정수 97로 저장됨) (권장함)
char ch1{ 97 }; // 정수 97로 초기화 ('a') (권장하지 않음)

임시 객체에 담겨 반환되어 호출자가 사용하게 됩니다.char에서 int)double에서 int)static_cast 연산자를 사용합니다.static_cast<새로운_타입>(표현식)
#include <iostream>
int main(){
std::cout << sizeof(int) << '\n';
return 0;
}
4
int일까요? 아니면 short일까요?sizeof가 반환하는 값의 타입이 std::size_t라는 것입니다. std::size_t는 컴파일러의 구현에 따라 정의되는 부호 없는 정수형의 별칭이에요. std::size_t가 unsigned int가 될지, unsigned long이 될지, 아니면 unsigned long long이 될지 등은 컴파일러가 알아서 결정한다는 뜻이지요.std::size_t 역시 시스템에 따라 크기가 변할 수 있습니다. std::size_t는 부호가 없는 최소 16비트(2바이트) 이상의 크기를 가진다는 것이 보장되지만, 대부분의 시스템에서는 애플리케이션의 주소 너비와 동일한 크기를 갖게 됩니다. 32비트 부호 없는 정수가 되고, 64비트 애플리케이션에서는 64비트 부호 없는 정수가 되는 식이죠.