2013-02-10 184 views
0

例如我有0 100 1110sign exponent mantisa这等于3.75。如何将其转换为十六进制或八进制形式?我几个小时都在努力搜索。请帮忙。将二进制浮点数转换为十六进制浮点数

你能帮助我在这里100411107/8没办法这是(7/8) * 2^43.75

回答

1

标志应该很明显。

尾数是指1 + 1/2 *第一位+ 1/4 *第二位+ 1/8 *第三位......听起来很熟悉吗?它基本上是二进制计数,除非它是'小数点后'。

指数表示将mantisa乘以2 ^指数。但是,你如何获得exponent中代表它代表什么价值的位?我做了一些谷歌搜索,显然如果最高位已设置,其余的是0(10,100,1000等),那么你有1,如果它是101你有2,等等。这意味着如果它是011你有0010你有-1等等。所以在这种情况下,我们有1指数。

所以在这种情况下,你想要计算1.875(mantisa)* 2^1(2 ^指数)并使其为正(符号)。

了解更多:http://en.wikipedia.org/wiki/Double-precision_floating-point_format(它是双精度的大小,但所有的原则应“应用”到任何大小浮点)

编辑:下面是关于指数更好的解释。

首先,在IEEE浮点中,指数的最小值和最大值具有特殊的含义 - 所有的零意味着“这是一个零或一个低于正常的数字”,所有的意思是“这是无穷大或NaN”。因此,即使我们有三位指数 - 000111,只有001110表示正常指数 - 这只有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

+0

我知道如何获得二进制浮点数,我问了有关转换的问题。 – Yoda 2013-02-10 09:29:52

+0

哦,那真的很容易,你只是 - 好吧,其他答案打我吧:) – Patashu 2013-02-10 09:30:47

+0

你能帮我吗这里'100'是'4'' 1110'是'7/8'没有办法就是'(7/8)* 2^4'是'3.75'。 – Yoda 2013-03-17 10:02:19

1

只需转换位,就好像它是一个整数。忽略你正在处理浮点数的事实。

01001110转换为十六进制4E,因为010041110E。 (请注意,我组四肢如何。)

同为八进制,它成为116,因为01100111106。 (请注意,除第一组之外,我是如何分组的,除了第一组外。)

+0

但问题是'4E'不是3.75。如何将其转换回小数点。 – Yoda 2013-03-17 10:00:14