C++内置数据类型包括算数类型和空类型。
算数类型:整型(字符型、整型数、布尔值)和浮点数。
1.C++语言规定,一个int至少和一个short一样大,一个long至少和一个int一样大,一个long long(C++11)至少和一个long一样打。
2.大多数计算机以2的整数次幂个比特作为块来处理内存,可寻址的最小内存块称为“字节(word)”,它通常由几个字节组成。在C++语言中,一个字节要至少能容纳机器基本字符集中的字符。大多数机器的字节由8比特构成,字则由32或64比特构成,也就是4或8字节。大多数计算机将内存中的每个字节与一个数字(被称为“地址(address)”)关联起来,在一个字节为8比特、字为32比特的机器上。
3.C++标准指定了一个浮点数有效位数的最小值,大多数编译器都实现了更高的精度。一般来说,类型float和double分别又7和16个有效位。
4.与其他整型不同,字符型被分为了三种:char、signed char和unsigned char。尽管字符型有三种,但是字符型的表现形式缺只有两种:带符号和无符号的。类型char实际上会表现为上述形式中的一种,由编译器决定。
5.自动类型转换
(1)非布尔类型的算数值赋给布尔类型:0转换为false,否则为true。布尔值赋给非布尔类型时,false转换为0,true转换为1。
(2)浮点数赋给整数类型,近似处理,仅保留小数点之前的部分。整数值赋给浮点类型,小数部分记为0,如果改整数所占空间超过了浮点类型的容量,精度可能有损失。
(3)赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。
(4)赋给带符号类型一个超出它表示范围的值时,结果是未定义的。此时,程序可能继续工作、可能崩溃,也可能产生垃圾数据。
(5)如果表达式里既有带符号类型又有无符号类型,当带符号类型取值为负时会出现异常结果,这是因为带符号数会自动转换成无符号数。
【C++Primer 第5版 笔记】