我有这个32位二进制数(00111111010000000000000000000000),我想知道如何将其转换为浮点数。
不使用编程或转换器,如何手动将此32位二进制数转换为浮点数?
谢谢,
丹
答案 0 :(得分:10)
假设您正在寻找单个浮点,请使用以下格式:
第一个数字是符号,接下来的8个是指数,最后,最后23个是有效数字。
您的号码(00111111010000000000000000000000)
签收:0是+
指数:01111110是-1(126-127)
意义:10000000000000000000000是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。
答案 1 :(得分:2)
如果你去浏览维基百科和其他地方,你将学到的是浮点标准(有不同的标准,IEEE754最常见,因为它用于台式机等等)(dsp会有它们的自己有时会更快地计算))将“标准化”数字。浮点是关于小数点的位置,非浮点整数在数字的右边有一个隐含的小数点
00111111010000000000000000000000. <--- here
除了要归一化的所有零之外,我们假设我们使用的格式要求数字为二进制的1.xxxx,因此我们需要移动小数点
001.11111010000000000000000000000
小数位在最重要的位置之后移动(因此小数点的左边只有一个1位)。
如果你记得从高中的数学123可以写成1.23 * 10 ^ 2(10到2的权力)。 123也是123 * 10 ^ 0。在基数为10的数字中左移小数的每个位置都会将10的幂增加1。右边的每个地方都减少了。基数为2的二进制没有区别,每个位置你移动小数点左边你增加2的幂(二进制是基数2)每个地方正确,你减少2的幂。
所以为了准确我们的号码现在是
1.1111101 * 2^30
现在浮点格式的细节开始发挥作用。因为小数点左边的1(除了确切的数字零和其他一些例外)被假定在那里,它有时不在该浮点数的最终二进制表示中,这是浪费空间我们知道的总是一个当我们可以为尾数再多一点时。 mantissas通常是二进制中的wysiwyg,指数是让你挠头的因素,特别是IEEE754。例如以数字的二进制格式表示128的指数可以表示2到功率0,129可以是2到功率1,依此类推。这可能看起来很奇怪,但它只不过是其中一些格式的二重补充字段,其他方式也可以做其他事情。单,双,扩展对指数有不同的位数,你需要弄清楚你添加到实指数(在这种情况下为30)的内容,以获得浮点数的指数字段中的位模式。 / p>
另一个例子
0000000000000000000000000000000000000101
将是
1.01 * 2^2
如果你从一个32位整数(不是浮点数)开始并希望以32位浮点数结束,你显然无法保留该数字的所有细节,因为浮点数需要一个符号位和一个指数除了尾数,尾数小于32位,因此你丢弃最低有效位
1000000000000000000000000000001
会在某些时候被切断:
1.000000000000000 * 2^something