python基本数据类型之整型和浮点型
python基本数据类型之数字与浮点型
在python3中,整数的数据类型为int,而浮点数的数据类型为float。python2中整数可以是int和long(长整型)两种类型,python3只保留了int,去除了long。
整型
int也属于不可变类型,即int类型的变量一旦在内存中被创建就无法改变。int类型本身的内置方法并不多,仅有4个方法:bit_length()、conjugate、from_bytes、to_bytes。
1、bit_length()
该方法是获取某个数字二进制形式的位数。
i = 5
v = i.bit_length()
print(bin(i))
print(v)
打印结果:
0b101
3
可以看到,5被转换成二进制就是101,该数字的二进制形式有3位。
2、conjugate
该方法是用来操作复数的。在python中,复数的表示方法为:real(实部) + image j(虚部)。实部和虚部都可以是浮点类型(float),虚部的后缀可以是j或J。conjugate方法可以返回复数的共轭复数。
i = (12 + 3.4j)
v = i.conjugate()
print(v)
打印结果:(12-3.4j)
注意,在定义复数的时候,尽量带上小括号,这样可以更加明确变量之间的关系。
3、from_bytes、to_bytes
from_bytes是将bytes类型的变量转化为十进制的数字。该函数是一个类函数(可以用类名直接调用的函数)。from_bytes一共有4个参数,其中一个参数是保留参数。
int.from_bytes(bytes, byteorder, *, signed=False)
- bytes 字节类型的变量
- bytesorder 字节类型变量的排序方式,'big'表示高位在前,低位在后;'little'表示低位在前,高位在后。
- signed 是否考虑符号位,默认为False,即不考虑符号位
例如:
s1 = b'\xff\xf1'
print(int.from_bytes(s1, byteorder='big', signed=True))
打印结果: 15
分析该方法的作用过程:
首先声明了一个bytes类型的变量s:
s1 = b'\xff\xf1'
,在引号前加上b表示该变量是bytes类型,\x表示后面两位是十六进制数字。将
\xff
写成二进制数字:1111 1111,\xf1
则写成:1111 0001,由于高低位标识为'big',即ff为高位,f1为低位,(如果是'little',则ff是低位,f1是高位),所以整个数字的二进制形式为:11111111 11110001。又因为signed=True,所以要考虑符号位。因为该数字的第一位是1,因此它是一个负数。十进制要用补码来表示,而负数的补码就是原码(除符号位外)取反加1。因此取反加1后的结果为:10000000 00001111。因此表示成十进制就是
-15
。
另外一个例子:
s1 = b'\xff\xf1'
print(int.from_bytes(s1, byteorder='little', signed=False))
打印结果:61951
在这个例子中,byteorder='little',表示ff是低位,f1是高位,则整个二进制数写作:11110001 11111111;signed=False表示不考虑符号位。因此表示为正数,结果就是61951。
to_bytes表示将某个数转换为十六进制表示,是from_bytes函数的逆过程。
print(int.to_bytes(61951, length=2, byteorder='little', signed=False))
打印结果:b'\xff\xf1'
to_bytes函数的参数与from_bytes的参数意义基本一致,其中length=2指定转换后的bytes类型用2位来表示,即\xff、\xf1两位。
浮点类型
python中的浮点数类型为float,其中包含的方法有:as_integer_ratio、conjugate、fromhex、hex、is_integer
conjugate的用法与int中的内置方法一样,因此不再赘述。
1、as_integer_ratio
该方法可以将某一个浮点数表示成两个整型(最小整数)之比的形式。
例如:
t = 10.5
print(t.as_integer_ratio())
打印结果:(21, 2)
该方法其实是将浮点数转换成分数形式,当遇到负数时,该方法会保证分母为正。
t = -0.25
print(t.as_integer_ratio())
打印结果:(-1, 4)
该方法寻找的是最精确的整数之比,所以当输入的小数特别复杂时,寻找到的最小整数也就越大。
t = -0.99
print(t.as_integer_ratio())
打印结果:(-4458563631096791, 4503599627370496)
当寻找的最精确比值中的整数超出int类型最大值时,会产生内存溢出的错误。
2、fromhex、hex
fromhex方法是将一个十六进制用十进制进行表示。
f1 = '0x1.fp1'
print(float.fromhex(f1))
打印结果:3.875
0x1.fp1中的符号表示意义如下:
- 0x 表示该数字是一个十六进制数字
- 1.f 这个是数字部分
- p1 科学计数法,p1的意思是2^1, 即2的1次方。
该函数的转换过程是:
- 1.f转换成二进制表示为:1.1111;
- 1.fp1表示的是1.111 * 2^1, 也就是将小数点右移一位,该数字表示为二进制:11.111。
- 将11.111转换成十进制。乘以2^(n-1)次方, 1*2^1 + 1*2^0 + 1*2^(-1) + 1*2^(-2) + 1*2^(-3) = 2 + 1 + 0.5 + 0.25 + 0.125 = 3.875。
而hex则是fromhex的逆过程,即将十进制数字转换成八进制表示。该过程同样也需要二进制作为中介。
f2 = 7.875
print(float.hex(f2))
打印结果:0x1.f800000000000p+2
该函数的过程如下:
- 将十进制数字拆分为整数部分和小数部分。7.875分为7 + 0.875
- 对于整数部分,让其除以2,不断取余,并逆序取值。
- 7 / 2 = 3...1(余1)
- 3 / 2 = 1...1
- 由最后得到的1往上取,即7 = 111b
- 对于小数部分,使其不断乘以2,取其整数部分,并顺序取值。
- 0.875 * 2 = 1.75(取1)
- 0.75 * 2 = 1.5(取1)
- 0.5 * 2 = 1
- 由第一个得到的1向下取,即0.875 = 0.111b
- 所以7.875转换成二进制为:111.111,使用科学计数法表示为:1.11111p2
- 将1.11111补齐:1.1111 1000,四位一取,即1.f8
所以7.875(10)转换成八进制:1.f8p2。
3、is_integer
该方法用来判断一个浮点数是否是整数,即能否精确转换成整数(小数部分是否全为0)。
i = 3.00
v1 = i.is_integer()
print('v1 = '+ str(v1))
i2 = 4.12
v2 = i2.is_integer()
print('v2 = '+ str(v2))
打印结果:
v1 = True
v2 = False
可以看到,当小数部分不全为0时,该方法返回的就是False。
python基本数据类型之整型和浮点型的更多相关文章
- 《从零开始学Swift》学习笔记(Day 13)——数据类型之整型和浮点型
Swift 2.0学习笔记(Day 13)——数据类型之整型和浮点型 原创文章,欢迎转载.转载请注明:关东升的博客 Swift提供8.16.32.64位形式的有符号及无符号整数.这些整数类型遵循 ...
- Swift数据类型_整型和浮点型
//swift中的整型和浮点型 /** * //类型推断整数是Int 浮点数是Double ,日常使用需要注意不能越界,存储时间毫秒数 英雄经验数等等之类内容容易越界 整型 大多数情况下,你不需要在代 ...
- Python基本数据类型之整型和布尔型
整型和布尔型 获取对象的数据类型 1.type() 2.dir() 3.help() 4.在pycharm里面的操作 数字类型 int 创建: int() 接收数字字符串 .bit_lenght() ...
- Swift数据类型之整型和浮点型-备
Swift提供8.16.32.64位形式的有符号及无符号整数.这些整数类型遵循C语言的命名规约,我归纳了Swift中的整型: 整型示例: print("UInt8 range: \(UInt ...
- go语言数据类型值--整型和浮点型
一.整型 1.整型的分类: 有符号整型: int8.int16.int32.int64 对应的无符号整型: uint8.uint16.uint32.uint64 uint就是我们熟知的byte类型,i ...
- 整型和浮点型与QByteArray的转换
目录 QByteArray 整型 QByteArray 浮点型 QByteArray QByteArray The QByteArray class provides an array of byte ...
- 以php中的比较运算符操作整型,浮点型,字符串型,布尔型和空类型
字符,数字,特殊符号的比较依赖ASC II表,本表原先有127个,后来又扩充了一些,里面包含了奇奇奇怪的符号. ASC II表 https://baike.baidu.com/item/ASCII/3 ...
- 课时5:闲聊之Python的数据类型
目录: 一.引言 二.数据类型 >整型 >浮点型 >布尔类型 三.类型转换 四.获得关于类型的信息 五.课时05课后习题及答案 *********** 一.引言 ********** ...
- python基本数据类型常用方法
python基本数据类型 1.整型 1.1 int 1.2 bit_lenght # 当前数字的二进制位数,至少用n位表示 r = age.bit_length() >>> a = ...
随机推荐
- java数据类型关系及关系
java中有常见的基本数据类型和引用数据类型,基本数据类型为四类八种如下 整数型(byte,short,int,long) 浮点型(float,double) 字符型(char) 布尔型(boolea ...
- http 文件上传协议图览
- 第一篇、Python初识
1.Python文件后缀是否可以任意? 单独执行的时候没关系,但当文件需要导入(即导入模块)的时候,如果不是py后缀的,会出错. 2.执行方法 1) python +文件路径 python + fil ...
- ---Intel SSD 750 under Linux
https://wiki.archlinux.org/index.php/Solid_State_Drives/NVMe
- 深入理解Java虚拟机之Java内存区域随笔
1.java内存区域与内存溢出异常 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域:1.程序计数器,2.栈(虚拟机栈和本地方法栈 ),3.堆,4.方法区(包含 ...
- Node Sass does not yet support your current environment解决办法
在React项目中,使用了sass.之前运行的好好的,今天突然报错,提示当前环境不支持sass模块,然后就百度了下,发现有相同问题的.原来问题是之前开发时node是6.x的版本,几天前更新到最新10. ...
- 【原创】python嗅探QQ消息实战
目录 需求分析 选型 设计与流程 实现过程 结果展示 1 需求分析 在一些业务场景中需要拿到IM上的通信记录来做一些数据分析,例如对QQ平台中的消息进行领域分类等. 2 选型 环境与工具: pyt ...
- 关于$.ajax同步和异步的问题和提交后台的一些问题。
经常有人ajax函数外,定义一个全局变量,并且在返回函数取出一个值用作判断条件,但是这一条件常常失效. var OnOff=0; var checkPhone = function() { var p ...
- netstat 常用参数总结
netstat 是一个机器网络查看工具 . 网络连接有哪些参数?
- windows、Linux同步外网NTP服务器时间
配置 Windows 时间服务以使用外部时间源 要将内部时间服务器配置为与外部时间源同步,请使用以下方法之一: 软件自动配置 Windows 时间服务 若要自动修复此问题,请单击“下载”按钮. 在“ ...