2.1 基本内置类型
2.11.算数类型
分类:整型(integral type) 与 浮点型
类型
|
含义
|
最小尺寸
|
bool
|
布尔类型
|
未定义
|
char
|
字符
|
8位
|
wchar_t
|
宽字符
|
16位
|
char16_t
|
Unicode字符
|
16位
|
char32_t
|
Unicode字符
|
32位
|
short
|
短整型
|
16位
|
int
|
整型
|
16位
|
long
|
长整型
|
32位
|
long long(c++11)
|
长整型
|
64位
|
float
|
单精度浮点数
|
6位有效数字
|
double
|
双精度浮点数
|
10位有效数字
|
long double
|
扩展精度浮点数
|
10位有效数字
|
注:1.bool型值为真或假。
2. 基本的字符类型为char,一个char空间可以存放机器基本字符集中任意字符对应的数字值,故其大小应该与一个机器字节一样。
3.其他字符类型用于扩展字符集。
4.除字符与布尔类型外,其他整型用于表示不同尺寸的整数.
5. 大多数计算机以2的整数次幂个比特来作为块来处理内存,可寻址的最小内存块称为"字节(byte)",存储的基本单元称为"字(word)",字通常由几个字节组成。大多数机器的字节由8比特构成。字则由32或者64比特构成,也就是4字节或8字节。
6. 大多数计算机将内存中的每个字节于一个数字(被称为地址·)关联起来。
7. 一般来说,float以1个字(32比特)来表示,double以2字表示,long double用三或四个字表示。且float与double分别有7和16个有效位。
带符号类型与无符号类型
除去布尔型和扩展的字符型之外,其他整型可以划分为带符号的(signed)和无符号的(unsigned),带符号的可以表示正负0,无符号只能表示大于等于0.
在其前添加unsigned即可,例如unsigned int。
字符型分为三种,char、signed char、unsigned char。char 与signed char不一样,尽管表示形式只有两种。
无符号类型中的所有比特用来存储值。
8比特的signed char理论为-127 到127,大多数计算机为-128至127.
注: 1.当明确知晓数值不可能为负时,选用无符号类型.
2.使用int执行整数计算,如果数值超出则用long long。
3.算术表达式中不要使用char与bool。
4. 浮点数一般使用double。
5.int类型比较特殊,具体的字节数同机器字长和编译器有关。如果要保证移植性,尽量用__int16 __int32 __int64吧
__int16、__int32这种数据类型在所有平台下都分配相同的字节。所以在移植上不存在问题。
所谓的不可移植是指:在一个平台上编写的代码无法拿到另一个平台上运行时,不能达到期望的运行结果。
例如:在32为平台上(所谓32位平台是指通用寄存器的数据宽度是32)编写代码,int 类型分配4个字节,而在16位平台是则分配2个字节,那么在16位上编译出来的exe,
其中是为int分配2字节,而在32位平台上运行时,会按照4个字节来解析,显然会出错误的!!
而对于非int行,目前为止,所有的类型分配的字节数都是兼容的,即不同平台对于同一个类型分配相同的字节数!!
建议:在代码中尽量避免使用int类型,根据不同的需要可以用short,long,unsigned int 等代替。
__int16、__int32这种数据类型在所有平台下都分配相同的字节。所以在移植上不存在问题。
所谓的不可移植是指:在一个平台上编写的代码无法拿到另一个平台上运行时,不能达到期望的运行结果。
例如:在32为平台上(所谓32位平台是指通用寄存器的数据宽度是32)编写代码,int 类型分配4个字节,而在16位平台是则分配2个字节,那么在16位上编译出来的exe,
其中是为int分配2字节,而在32位平台上运行时,会按照4个字节来解析,显然会出错误的!!
而对于非int行,目前为止,所有的类型分配的字节数都是兼容的,即不同平台对于同一个类型分配相同的字节数!!
建议:在代码中尽量避免使用int类型,根据不同的需要可以用short,long,unsigned int 等代替。