基本数据类型
C++提供了七种基本数据类型。
类型 | 关键字 |
---|---|
布尔型 | bool |
字符型 | char |
整型 | int |
浮点型 | float |
双精度浮点 | double |
无类型 | void |
宽字符型 | wchar_t |
基本类型都可以使用一个或者多个以下修饰符进行修饰:
signed
,有符号类型;unsigned
,无符号类型;short
,半长度类型;long
,双倍长度类型。
布尔型
布尔型是 C++中最简单的类型,使用bool
来定义,只使用 1 个字节来存储数据,只表达真(true
)和假(false
)两个值。
整型与字符型
C++中的字符型只代表一个 ASCII 字符,在内存中占一个字节,在使用时可以像整型一样使用。
下表列出了所有整型和字符型变量的声明标识符以及在内存中所占的长度。
类型标识符 | 所占字节位数 | 最小值 | 最大值 |
---|---|---|---|
char | 1 | -128 | 127 |
unsigned char | 1 | 0 | 255 |
signed char | 1 | -128 | 127 |
int | 4 | -2^31 | 2^31 |
unsigned int | 4 | 0 | 2^32 |
signed int | 4 | -2^31 | 2^31 |
short int | 2 | -2^15 | 2^15 |
unsigned short int | 2 | 0 | 2^16 |
signed short int | 2 | -2^15 | 2^15 |
long int | 8 | -2^63 | 2^63 |
unsigned long int | 8 | 0 | 2^64 |
signed long int | 8 | -2^63 | 2^63 |
float | 4 | -3.4E+38 | 3.4E+38 |
double | 8 | -1.7E+308 | 1.7E+308 |
long doble | 16 | -1.7E+308 | 1.7E+308 |
wchar_t | 2~4 |
表中各类型变量在内存中所占的字节长度根据所在系统不同会有所不同。类型wchar_t
根据所存储的字符的编码方式不同,会占据 2 到 4 个不等的字节,例如 GBK 编码汉字会占据 2 字节,UTF-8 编码内容则占据 3 个字节。
C++中提供了一系列的前缀与后缀来对字面量进行类型标记,主要应用与整型和字符型类型中。整型数值可以是十进制、八进制和十六进制,C++提供了两个前缀来表示不同的进制数字,0x
表示十六进制数字,0
表示八进制数字,不带前缀的表示十进制数字。
从前面的表格中,可以看到整型数值是有有无符号和长短之分的,所以 C++提供了两个后缀来标记整型数值的类型,U
表示无符号整数,L
表示长整数,这两个后缀在使用时大小写与出现顺序没有限制,例如:19923UL
。
浮点与精确计算
在 C++中,浮点数是使用float
和double
两个浮点类型来操作的,但是浮点数在计算时能够保持的精度可能不能满足需要,例如float
可以保持 7 个数字,而double
可以保持 15 个数字。浮点数的使用与整型没有什么区别,而且很多数学函数都会返回double
类型的返回值。
但是我们在大部分时刻往往会需要到精确的计算小数,这就需要使用标准库中提供的类型了。一般可选的解决方法是标准库中的iomainip
或者 Boost 库中的multiprecision
,具体使用可参考后文说明。