基本数据类型

C++提供了七种基本数据类型。

类型关键字
布尔型bool
字符型char
整型int
浮点型float
双精度浮点double
无类型void
宽字符型wchar_t

基本类型都可以使用一个或者多个以下修饰符进行修饰:

  • signed,有符号类型;
  • unsigned ,无符号类型;
  • short,半长度类型;
  • long,双倍长度类型。

布尔型

布尔型是 C++中最简单的类型,使用bool来定义,只使用 1 个字节来存储数据,只表达真(true)和假(false)两个值。

整型与字符型

C++中的字符型只代表一个 ASCII 字符,在内存中占一个字节,在使用时可以像整型一样使用。

下表列出了所有整型和字符型变量的声明标识符以及在内存中所占的长度。

类型标识符所占字节位数最小值最大值
char1-128127
unsigned char10255
signed char1-128127
int4-2^312^31
unsigned int402^32
signed int4-2^312^31
short int2-2^152^15
unsigned short int202^16
signed short int2-2^152^15
long int8-2^632^63
unsigned long int802^64
signed long int8-2^632^63
float4-3.4E+383.4E+38
double8-1.7E+3081.7E+308
long doble16-1.7E+3081.7E+308
wchar_t2~4

表中各类型变量在内存中所占的字节长度根据所在系统不同会有所不同。类型wchar_t根据所存储的字符的编码方式不同,会占据 2 到 4 个不等的字节,例如 GBK 编码汉字会占据 2 字节,UTF-8 编码内容则占据 3 个字节。

C++中提供了一系列的前缀与后缀来对字面量进行类型标记,主要应用与整型和字符型类型中。整型数值可以是十进制、八进制和十六进制,C++提供了两个前缀来表示不同的进制数字,0x表示十六进制数字,0表示八进制数字,不带前缀的表示十进制数字。

从前面的表格中,可以看到整型数值是有有无符号和长短之分的,所以 C++提供了两个后缀来标记整型数值的类型,U表示无符号整数,L表示长整数,这两个后缀在使用时大小写与出现顺序没有限制,例如:19923UL

浮点与精确计算

在 C++中,浮点数是使用floatdouble两个浮点类型来操作的,但是浮点数在计算时能够保持的精度可能不能满足需要,例如float可以保持 7 个数字,而double可以保持 15 个数字。浮点数的使用与整型没有什么区别,而且很多数学函数都会返回double类型的返回值。

但是我们在大部分时刻往往会需要到精确的计算小数,这就需要使用标准库中提供的类型了。一般可选的解决方法是标准库中的iomainip或者 Boost 库中的multiprecision,具体使用可参考后文说明。