将二进制浮点转换为十六进制浮点

时间:2013-02-10 09:11:58

标签: floating-point binary hex octal

例如,我0 100 1110 sign exponent mantisa这等于3.75。如何将其转换为十六进制或八进制形式?我已经搜索了几个小时。请帮忙。

100 4 1110 7/8 (7/8) * 2^4 3.75 {{1}} {{1}}是{{1}} {{1}}

2 个答案:

答案 0 :(得分:1)

标志应该是显而易见的。

尾数意味着,1 + 1/2 *第一位+ 1/4 *第二位+ 1/8 *第三位......声音熟悉?它基本上是二进制计数,除了它是'小数点后'。

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

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

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

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

首先,在IEEE浮点数中,指数的最小和最大值具有特殊含义 - 全零表示'这是零或次正规数',所有这些都意味着'这是无穷大或NaN'。所以,即使我们有三位指数 - 111001,只有110smallest normalized number表示正常的指数 - 这只是6个值。

现在,使用称为“指数”偏差的东西将这个1 ... 6范围转换为负值和正值 - 特别是,你想要一个-2 ... 3范围(具有最大正指数>最大负指数的大小,所以你不能通过1 / denormalized number来获得溢出。但是,1 / Infinity可以产生0 100 1110。)

我们通过取exponent中的值得到这个,如果不是特殊情况,我们从其二进制值中减去3,并将其作为指数值。

因此

0

100 - >积极的迹象

1110 - >二进制值4,减去3,指数1

{{1}} - > 1 + 7/8

(1 + 7/8)* 2 ^ 1 = 3.75

答案 1 :(得分:1)

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

01001110以十六进制转换为4E,因为010041110E。 (请注意我是如何分组的。)

对于八进制,它变为116,因为01100111106 }。 (注意我是如何分组的,除了第一组之外。)