python中浮点单精度用什么表示_在python中解析十六进制格式的DEC 32位单精度浮点值...

字节是否可能被某种方式洗牌了?您描述的位的排列(字节2中的符号位,字节1中的指数的LSB)与您链接到的附录O不同。看起来字节1和2被交换了。在

我假设字节3和4也被交换了,因此实际的十六进制值是43D4DB93。这转换成二进制的01000111011001011011010110010010010011001,因此符号位为0,表示正数。指数为10000111(二进制)=135(十进制),表示系数为2^(135-128)=128。最后,尾数是0.11010110110010010010011(二进制),使用附录O,你必须在前面加上0.1,这大约是十进制的0.8314。所以根据我的假设,你的数字是0.8314*128=106.4。在

添加:一些Python 2代码可能会澄清:input = 0xD44393DB;

reshuffled = ((input & 0xFF00FF00) >> 8) | ((input & 0x00FF00FF) << 8);

signbit = (reshuffled & 0x80000000) >> 31;

exponent = ((reshuffled & 0x7F800000) >> 23) - 128;

mantissa = float((reshuffled & 0x007FFFFF) | 0x00800000) / 2**24;

result = (-1)**signbit * mantissa * 2**exponent;

这将产生result = 106.42885589599609。在

下面是计算尾数的一条线的解释。首先,reshuffled & 0x007FFFFF产生编码尾数的23位:1010100110110110011。然后... | 0x00800000设置隐藏位,得到11010101011010110010010010011。我们现在要计算分数0.11010110110010010010011。根据定义,这等于1*2^(-1) + 1*2^(-2) + 0*2^(-3) + ... + 1*2^(-23) + 1*2^(-24)。这也可以写成(1*2^23 + 1*2^22 + 0*2^21 + ... + 1*2^1 + 1*2^0) / 2^24。括号中的表达式是11010101011010110010010011(二进制)的值,因此我们可以通过将(reshuffled & 0x007FFFFF) | 0x00800000除以2^24来找到尾数。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值