python float字节数_float型的数在内存中的表示 附:python3解析函数 | 学步园
32为操作系统中float型的数是4个字节(32位),小数0.002122二进制格式如下:
00111011000010110001000101000001
左起第1位:是整个数的符号位,0正 1
负左起第2-9位:是指数的倒数
左起10-32位:是科学计数法系数的小数部分 (二进制表示)
下面是我写的一个解析float内存结构的函数,python3写的
##文件名:decimal.py
#输入32个01组成的二进制字符串
def decimals( dat):
lendat = len(dat)
if lendat != 32:
print('字符串长度不是32')
return 0
for c in dat:
if (c != '0') and (c != '1'):
print('输入的字符串含有不合法的字符')
return 0
#dattemp = dat[24:32]+dat[16:24]+dat[8:16]+dat[0:8] #写到硬盘上的浮点数要调整顺序 顺序颠倒
dattemp = dat
print('dattemp:',dattemp)
sigbit = dattemp[0] #符号位
expsigbit = dattemp[1] #指数符号位
exponent = dattemp[2:9] #指数
mantissa = dattemp[9:32] #尾数
print(sigbit,expsigbit,exponent,mantissa)
print('总长度:',(len(sigbit)+len(expsigbit)+len(exponent)+len(mantissa)))
iexp = 0 #指数的十进制
print('符号位sigbit:',sigbit)
print('指数符号位expsigbit:',expsigbit)
print('指数exponent:',exponent)
print('尾数mantissa:',mantissa)
ipos = 0 #游标 标记'1'的位置
#[expsigbit+dattemp] 就是原来原小数(二进制数)转换成科学计数法后 (样子像这样:1.1001101*2^n) 那个2上面的指数n
temp = exponent[::-1]
for c in temp:
if (c == '1') ^ (expsigbit == '0'): #右移时算'0'的个数 左移时算'1'的个数 不移不算
iexp += 2**ipos
#print('当iops=',ipos,'时,iexp=',iexp,' c:',c,'expsigbit:',expsigbit)
ipos += 1
else:
if expsigbit == '1':#如果是左移 位数值要加1
iexp += 1
iexp *= -1
#print("得到标志:",iexp)
iexp *= -1 #这里乘以-1是为了下面的好算,这就是指数了
#print("指数为",iexp)
decimalpart = 0.0 #科学计数法的小数部分
ipos = 0 #游标 标记'1'的位置
for c in mantissa:
ipos += 1
if c=='1':
decimalpart += 2**-ipos
#print('decimalpart=',decimalpart,'/t2^-',ipos,'=',2**-ipos)
intpart = 1 #整数部分 因为2进制的数科学计数法 整数部分只能是1
#print('decimalpart:',decimalpart)
if sigbit == '0':
flt = (intpart + decimalpart)*2**(iexp)
else:
flt = (-1)*(intpart + decimalpart)*2**(iexp)
return flt
################################
#文件名:main.py
#调用方法如下:
from decimal import *
s='00111011000010110001000101000001'
print('原始字符串为:',s)
print('解析结果为:',decimals(s))
解析结果为: 0.00212200009264
小数的结果不完全等于原来的小数 因为浮点数有误差 (尾数段不够长,double的长一些所以更精确)
python float字节数_float型的数在内存中的表示 附:python3解析函数 | 学步园相关推荐
- C语言程序设计 | 整型、浮点型在内存中的存储方式
整型在内存中的存储 一个变量的创建要在内存中开辟空间,空间的大小是根据不同的类型决定的. 那数据在数据在所开辟的空间中是如何存储的呢? 首先我们要了解三个概念: 原码 反码 补码 计算机中的有符号数有 ...
- python以写模式打开录入_Python的学习(六)—-文件和输入输出处理 | 学步园
Python中的文件和输入输出处理 1. 文件对象的概念 文件对象不仅可以用来访问普通的磁盘文件,还可以访问任何其他类型抽象层面上的文件. 例如实时地"打开一个URL"来读取Web ...
- python sched_python中的crontab ————sched标准库 | 学步园
可以做计划任务,就是在指定的延时之后执行一段程序. sched.scheduler(timefunc, delayfunc) 接受两个参数,timefunc必须在没有参数的情况下也能调用,返回延时数字 ...
- 【Python】(2022.07.03)在Jupyter Notebook中调用Stata17并绘制3D图展示回归结果的边际效应
文章目录 背景介绍: 实现结果 安装过程 安装stata_setup包 检查是否安装成功 常见问题 调用stata 常见问题 1. stata安装在哪 2. 返回报错:TypeError: init( ...
- 十六进制字节串转换为float型十进制数
十六进制字节串转换为float型十进制数 可以使用Python内置的struct和binascii模块.具体来说,需要使用struct.unpack()方法将十六进制字节串解包为float型数值. 以 ...
- c语言英文字母占用字节数,字符型变量占用字节数 c语言里字符型数据占多少字节...
一个字符型变量所占内存的字节数是一个字符型变量所占内存的字节数是 1个字节. 字符与字符型变量有什么区别,都占几个字节 (一)"字节"的定义 字节(Byte)是一种计量单位,表示数 ...
- [转载] python字符串转化为16进制数_python实用知识,数值类型和进制整数的转换
参考链接: 在Python中将整数int转换为字符串string 喜欢编程,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远! 1.数值类型的转换 int()可以将字符串 ...
- python求是不是完数_python求完数
len(x) 击败 x.len(),从内置函数看 Python 的设计思想 内置函数是 Python 的一大特色,用极简的语法实现很多常用的操作. 它们预先定义在内置命名空间中,开箱即用,所见即所得. ...
- int型的数到底最大值是多少?
刚才在百度知道上看见一个网友问int型的数最大能存多少.这个问题其实计算机系统结构里有讲解, 首先,我们要知道在计算机里怎么存储数字的.在计算机里,对数字编码有3种方式:原码.补码.反码.原码其实就是 ...
最新文章
- .NET中多线程的使用
- 对一种自制乐器进行音高修正和音色分析
- oracle找不到mts,oracle 11g启动时找不到OracleMTSRecoveryService的解决方法
- linux下的ssh端口号修改,如何在 Linux 中更改 SSH 端口
- Java深入研究_Java底层深入研究(一)
- windows系统下,双网卡电脑更改默认路由的命令-转
- Acer 4736ZG的Mac之旅
- B - Catch That Cow(广度搜索)
- matlab函数紫色代码,MATLAB 语法高亮颜色设置 - MATLAB
- MathWorks 中国
- Scala下载和安装
- 【SVM分类】基于布谷鸟算法优化支持向量机SVM实现数据分类附matlab代码
- 软考网络工程师易错100问
- Android进阶——动画家族之视图动画、属性动画和过渡(转场)动画总结(一)
- 北京工业大学外网访问知网数据库方法
- “卖给我一支笔”:乔布斯会如何应对这个经典问题?
- 如何取消Office 正版增值验证
- 2006-2020年10月各类型国债利率
- 设计师收藏的20款英文手写字体【免费下载】
- 出现生产事故测试应该怎么做
- 【Java面经】阿里三面被挂、幸获内推,历经5轮终于拿到口碑offer