将二进制浮点数转换为十六进制浮点数
例如我有0 100 1110
sign exponent mantisa
这等于3.75
。如何将其转换为十六进制或八进制形式?我几个小时都在努力搜索。请帮忙。将二进制浮点数转换为十六进制浮点数
你能帮助我在这里100
是4
1110
是7/8
没办法这是(7/8) * 2^4
是3.75
。
标志应该很明显。
尾数是指1 + 1/2 *第一位+ 1/4 *第二位+ 1/8 *第三位......听起来很熟悉吗?它基本上是二进制计数,除非它是'小数点后'。
指数表示将mantisa乘以2 ^指数。但是,你如何获得exponent
中代表它代表什么价值的位?我做了一些谷歌搜索,显然如果最高位已设置,其余的是0
(10,100,1000等),那么你有1
,如果它是101
你有2
,等等。这意味着如果它是011
你有0
,010
你有-1
等等。所以在这种情况下,我们有1
指数。
所以在这种情况下,你想要计算1.875(mantisa)* 2^1(2 ^指数)并使其为正(符号)。
了解更多:http://en.wikipedia.org/wiki/Double-precision_floating-point_format(它是双精度的大小,但所有的原则应“应用”到任何大小浮点)
编辑:下面是关于指数更好的解释。
首先,在IEEE浮点中,指数的最小值和最大值具有特殊的含义 - 所有的零意味着“这是一个零或一个低于正常的数字”,所有的意思是“这是无穷大或NaN”。因此,即使我们有三位指数 - 000
到111
,只有001
到110
表示正常指数 - 这只有6个值。
现在,所谓的“指数”偏差被用来将这个1 ... 6范围转换为负值和正值 - 特别是,您希望-2 ... 3范围(最大正指数>最大负指数的大小,所以你不能做1/smallest normalized number
得到溢出。然而,1/denormalized number
可以产生Infinity
。)
我们得到这个通过采取指数的值,如果它不是一个特殊情况下,我们从其二进制值中减去3,并将其作为指数值。因此
0 100 1110
是
0
- >正号
100
- >二进制值4,减去3,指数1
1110
- > 1 + 7/8
(1 +7/8)* 2^1 = 3.75
只需转换位,就好像它是一个整数。忽略你正在处理浮点数的事实。
01001110
转换为十六进制4E
,因为0100
是4
和1110
是E
。 (请注意,我组四肢如何。)
同为八进制,它成为116
,因为01
是1
,001
是1
和110
是6
。 (请注意,除第一组之外,我是如何分组的,除了第一组外。)
但问题是'4E'不是3.75。如何将其转换回小数点。 – Yoda 2013-03-17 10:00:14
我知道如何获得二进制浮点数,我问了有关转换的问题。 – Yoda 2013-02-10 09:29:52
哦,那真的很容易,你只是 - 好吧,其他答案打我吧:) – Patashu 2013-02-10 09:30:47
你能帮我吗这里'100'是'4'' 1110'是'7/8'没有办法就是'(7/8)* 2^4'是'3.75'。 – Yoda 2013-03-17 10:02:19