Floating point 如何将32位二进制数转换为浮点数?

Floating point 如何将32位二进制数转换为浮点数?,floating-point,binary,Floating Point,Binary,我有这个32位二进制数(001111110100000000000000000000),我想知道如何将它转换成浮点数 如果不使用编程或转换器,如何手动将此32位二进制数转换为浮点数 谢谢 Dan假设您正在查找单个浮点,以下是格式: 第一个数字是符号,接下来的8是指数,最后的23是有效位 您的电话号码(001111110100000000000000000000) 符号:0是+ 指数:0111110为-1(126-127) 有效位:100000000000000000000为1.5(不可见的第一位

我有这个32位二进制数(001111110100000000000000000000),我想知道如何将它转换成浮点数

如果不使用编程或转换器,如何手动将此32位二进制数转换为浮点数

谢谢


Dan

假设您正在查找单个浮点,以下是格式:

第一个数字是符号,接下来的8是指数,最后的23是有效位

您的电话号码(001111110100000000000000000000)

符号:0是+
指数:0111110为-1(126-127)
有效位:100000000000000000000为1.5(不可见的第一位为1,第二位(仅一组)为0.5,下一位为0.25,然后为0.125,依此类推)

然后计算如下值:

符号*2^exp*有效位

1*2^-1*1.5
1*0.5*1.5
0.75


你的浮点数等于0.75。

如果你环顾维基百科和其他地方,你会学到的是,浮点数标准(有不同的标准,IEEE754是最常见的,因为它在台式机上使用,等等(dsp有时会有自己的标准,计算速度更快))将会改变“规范化”数字。浮点是关于小数点的位置,非浮点整数在数字的右边有一个隐含的小数点

00111111010000000000000000000000. <--- here
小数点移动到最重要的一位之后(因此小数点左侧只有一个1)

如果你还记得高中数学中的123可以写成1.23*10^2(10的幂2).123也是123*10^0。在以10为基数的数字中,每向左移动一位小数,10的幂就会增加一。向右移动一位小数,10的幂就会减少。在以2为基数的二进制中,没有什么不同,每向左移动一位小数,就会增加2的幂(二进制是以2为基数的)。每向右移动一位,就会减少2的幂

准确地说,我们现在的数字是

1.1111101 * 2^30
现在,浮点格式的细节开始发挥作用。因为小数点左边的1(除了精确数字零和一些其他例外)假设存在,它有时不在浮点数的最终二进制表示形式中,当我们可以为尾数多放一位时,放一位我们知道总是一位是浪费空间的。尾数通常是二进制中的wysiwyg,指数是让你挠头的指数,尤其是IEEE754.例如,在二进制格式中,数字的指数128可能表示2对0的幂,129可能是2对1的幂,依此类推。这可能看起来很奇怪,但对于其中一些格式来说,它只不过是一个2的补码字段,其他格式则有其他方法。单、双、扩展的数字的位数不同e指数,您需要计算出添加到实指数(本例中为30)中的内容,以获得浮点数的指数字段中的位模式

另一个例子

0000000000000000000000000000000000000101
会是

1.01 * 2^2
如果您以32位整数(不是浮点)开始,并希望以32位浮点数字结束,则显然无法保留该数字的所有细节,因为浮点数字需要符号位、指数以及尾数,尾数小于32位,因此您会丢弃最低有效位

1000000000000000000000000000001  
将在某个时候被切断:

1.000000000000000 * 2^something

Wikipedia有一个关于如何分解值的描述。这个二进制模式是一个整数(不是浮点),你想知道这个数字的浮点版本是什么样子的吗?或者这个二进制模式是一个浮点数字,你想知道十进制123.45678中是什么样子的,随便什么?
1.000000000000000 * 2^something