首页 > 编程知识 正文

浮点数的十六进制表示(python中float的意思)

时间:2023-05-03 08:17:52 阅读:77123 作者:3335

我今天用微软拿的计算器计算了浮点十六进制代码,没想到。 然后,我查了又查,很难理解这个。

浮点的分配方式为32位、符号位(正负)、小数点位、小数点后的位数。

首先,计算机的内部数字按相反顺序存储在内存中。 也就是说1234,实际保管是4321。 我不知道怎么存储内存,只能在硬盘上看数据。 硬盘上的数据有大端序和小端序之分,但默认情况下,中文操作系统似乎是反向的小端序(little-endian )。

大印第安人

小端节序

将32位整数存储在硬盘上的顺序为每8位一个数字。 也就是说,每个数字都由十六进制表示,并像8位堆栈一样反向存储在硬盘上。 例如,整数3、347、750、752以十六进制表示,通常顺序是C7 8A 9F 60,存储在硬盘中时是60 9F 8A C7。

这个顺序很重要,我做音乐播放器几乎每天都在查PCM码,每天计算去。 我已经不熟悉逆序代码了。

但是研究浮点型,需要把十六进制转换成二进制。 因为浮点位有特定的用途。

在32比特浮点型数字中,第32比特是已编码比特,之后的8比特(即,23-31比特)是指数比特,而剩馀的23比特是尾数比特。

符号容易理解,即正负位。 至于什么是指数位,什么是尾数位,简单来说就是2^ (指数位-127 ) *尾数位。 以0.8、-0.8为例

首先,让我们看看这两个数的十六进制代码。

上图为正,下图为负。

同样是正负的。 反向输入计算器得到二进制值。

0.8的十六进制: 3F4C CCCD

0.8的二进制文件:0011 1111 0100 1100 1100 1100 1100 1101

正数符号位为0,负数符号位为零

请记住,这是逆序的。 也就是说,左起第一位是32位,即符号位。 这是最简单,最容易理解的。

下一个指数位的部分011 1111 0,指数位表示什么? 用十进制来说,指数位是指表示这个数字的位。 就像100千万,10^n次左右。 二进制也是一样的。 8位最多可以表示256个,即2^256次幂,但指数可以有负数,因此例如小于1的小数都是负数。 的0次方是1。 如果没有符号位,我们折中以127为边界,低于127表示负数,高于127表示正数。 也就是比1大的数。 虽然听起来很麻烦,但让我们来看看实例吧。

例如1.0000的二进制代码为0011 1111 1000 0000 0000 0000 0000 0000,红字部分是指数位。

也就是0111 1111,也就是127。 指数是0。 2^0=1。 1.00000,零数部分

例如,0.5000的二进制代码为0011 1111 0000 0000 0000 0000 0000 0000

0.5的指数位为0111 1110,即126,127-1,即-1。 2^(-1 )=0.5,尾数部为0。

0.25的二进制代码0011 1110 1000 0000 0000 0000 0000 0000

0.25的指数位为0111 1101,值为125,127-2。 2^(-2 )。

看看不能被二进制数整除的数字0.3333的二进制代码。0011 1110 1010 1010 1010 0110 0100 1100

0111 1101也是125,也就是-平方。 指数提供0.25的基础位数,相当于十进制的19、210、304的10、200、300,尾数部分用于表示9、10、04。 0.33的二进制指数位提供0.25个部分,即2^(-2 ),而剩下的0.0833由尾数提供

具体计算如下。

例如0.4的二进制文件为0011 1110 1100 1100 1100 1100 1100 1101(尾数)

http://www.Sina.com/http://www.Sina.com /

因为看了错误的教程,我走了很多弯路才弄清楚。 每次比较浮点数的二进制和十六进制代码时,都需要思考为什么是这样,浪费了很多时间。 我把这个写得这么细致是想不再浪费时间。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。