类型
1. 什么是类型
数据类型是一组性质相同的值集合以及定义在这个值集合上的一组操作的总称
理解类型的概念有一个重点: 类型的存在不光定义的值的性质,同时还定义了操作。 例如:
int
类型你知道可以加减乘除求余,如果是两个相同类型结构体相加呢? 这个运算的结果是什么?这是需要定义的
2. C 的基本类型 (Basic Type)
2.1 字符类型 (Character Type)
char
signed char
,unsigned char
wchar_t
,char16_t
,char32_t
2.2 整数类型 (Integer Type)
char
signed char
,short
,int
,long
,long long
__int128
等实现定义的类型- 2 和 3 统称有符号整数类型
bool
unsigned char
unsigned short
,unsigned
,unsigned long
,unsigned long long
__uint128
等实现定义的类型- 5,6 和 7 统称无符号整数类型
- 类型
size_t
是实现定义的类型
2.3 浮点类型 (Floating-Point Type)
- 实浮点类型(表示一个实数):
float
,double
,long double
- 十进制实浮点类型:
_Decimal32
,_Decimal64
,_Decimal128
- 虚数类型(表示一个虚数):
float _Imaginary
,double _Imaginary
,long double _Imaginary
- 复数类型(表示一个复数):
float _Complex
,double _Complex
,long double _Complex
3. 类型的大小和表示范围
3.1 位和字节
- 位:执行环境中的存储单元。它可以容纳一个“可以拥有两种状态”的对象。
- 字节:执行环境中的存储单元。它有“地址”,可以容纳基础字符集里的字符。
3.2 sizeof
运算符的一种用法
sizeof ( 类型名 )
- 返回值类型为
size_t
,值为此类型的大小,单位是字节。
3.3 整型占据空间的大小和能表示的范围
signed char
/unsigned char
:至少 8 位;(unsigned) short
:至少 16 位;(unsigned) int
:至少 16 位,常见实现为 32 位;(unsigned) long
:至少 32 位;(unsigned) long long
:至少 64 位。- 8 位的有符号整数,取值范围为 -128~127;8 位的无符号整数,取值范围为 0~255;
- 16 位的有符号整数,取值范围为 -32768~32767;16 位的无符号整数,取值范围为 0~65535;
- 32 位的有符号整数,取值范围为 -2147483648~2147483647;32 位的无符号整数,取值范围为 0~4294967295;
- 64 位的有符号整数,取值范围为 -9,223,372,036,854,775,808~9,223,372,036,854,775,807;64 位的无符号整数,取值范围为 0~18,446,744,073,709,551,615。
1
==sizeof(char)
≤sizeof(short)
≤sizeof(int)
≤sizeof(long)
≤sizeof(long long)
。size_t
是一种无符号整数类型,至少 16 位。
3.4 浮点型占据空间的大小,能表示的范围和精度
- IEEE-754 详情参见 IEEE754.md
float
:32 位,通常匹配 IEEE-754 binary32 格式。double
:64 位,通常匹配 IEEE-754 binary64 格式。long double
:实现定义,常见的实现为 128 位或 80 位。_Decimal32
:32 位,匹配 IEEE-754 decimal32 格式。_Decimal64
:64 位,匹配 IEEE-754 decimal64 格式。_Decimal128
:128 位,匹配 IEEE-754 decimal128 格式。
本章内容对应 cppref 链接如下: