
3.1.2 整型、浮点型、布尔型与复数型
以前一般认为Python支持5种数据类型,如下所示。
● 符号整型(一般意义上的无符号整型实际上是有符号整型省略了加号以后的形式)。
● 长整型。
● 布尔型。
● 浮点型。
● 复数型。
而现在使用的Python 3.7已经合并了有符号整型和长整型,所以只有4种数据类型了。需要注意的是,在传统的C/C++里,符号整型的数据范围是-2 147 483 648至2 147 483 647,而长整型的数据范围是-9 223 372 036 854 775 808至9 223 372 036 854 775 807。而在Python中,一开始有符号整型的数据范围和C/C++的符号整型的数据范围一样,是-2 147 483 648至2 147 483 647,但长整型的数据范围有所不同,Python的长整型的数据范围由系统的虚拟内存大小决定,越大的虚拟内存存放的数据范围越大。而Python3将有符号整型和长整型合并为单一的整型,它的数据范围遵循原来的Python长整型的规则。
布尔型也是一种数据类型,在Python中由True和False两个变量来表示。布尔型可以与数字(可以是整型、浮点型、复数型)相加,True作为1,False作为0,示例如下:

输出结果:

一般情况下,在一个变量使用结束后,Python解释器会自动回收这个变量占用的空间。当然,用户也可以用del语句手动回收,可以一次删除一个变量,也可以一次删除多个,示例如下:

现在再来讨论浮点型。在C/C++里,浮点型变量分为单精度浮点数和双精度浮点数两种,它们所表示的浮点数范围由小到大。其中,单精度浮点数可以表示的范围是-2128至2128,即-3.4×1038至3.4×1038,被称为float。而双精度浮点数表示的范围更大,为-21024至21027,即-1.79×10308至1.79×10308,被称为double。Python中的浮点数一般就是C/C++中的双精度浮点数,它们所表示的范围是一样的。
IEEE 754标准定义了浮点数的表示方式,即52位用于表示底数,被称为“尾数”(Fraction);11位用于表示指数,被称为“阶码”(Exponent);剩下的一位用于表示符号位,被称为“数符”(Sign)。其中,8比特(bit)=1字节(B),1024字节(B)=1千字节(KB),依次类推。表3-1所示为IEEE 754标准定义的浮点数组成示意。
表3-1 IEEE 754标准定义的浮点数组成示意

浮点数的位数具体分为短实数(float型)、长实数(double型)、临时型(long double型),如表3-2所示。
表3-2 IEEE 754标准定义的浮点数的具体分配位数

然而,浮点数的小数点位数实际的精确度和机器架构及使用的Python解释器版本也有联系。
浮点数还有一种表示方式,即科学记数法,通常用这种方式来表示较大的整数和浮点数。科学记数法一般是以一个只有个位的浮点数(小于10的浮点数)乘以10的n次方构成的,如普朗克常量h可以表示为h=6.62 607 015×10-34J·S,在Python及其他编程语言里常常用大写字母E或者小写字母e代指底数10,所以普朗克常量也可以用Python表示为如下形式:

输出结果:

可见,用e或者E,结果是一样的,is语句通常用来判断两个变量是否相同。
复数,又称虚数,它与实数恰恰相反,复数不表示任何有意义的数字。最早数学家发现负数开偶次方在实数范围内没有结果,例如,求。它的结果只能用复数表示为
,也有少数教材用j来表示i。这里,0称为“实部”(即实数部分),2i称为“虚部”(即虚数部分),自从这种特殊的数字出现后,数学就多了一个分支。复数在数学中表示为a+bi,在Python中与之类似,表示为real+(imag)j。需要注意的是,real和imag都是浮点数。在Python中,复数有3个内建属性,如表3-3所示。
表3-3 Python中复数的3个内建属性

这里再介绍一下共轭复数。两个实部相等、虚部互为相反数的复数互为共轭复数。当复数的虚部不为零时,共轭复数的实部相等,虚部相反。如果复数的虚部为零,共轭复数就是其自身(当虚部不等于0时也叫共轭虚数)。复数z的共轭复数记作,有时也可表示为Z*。同时,复数
称为复数z的复共轭。所以a+bi的共轭复数是a-bi。示例如下:

输出结果:
