例如,我0 100 1110
sign exponent mantisa
这等于3.75
。如何将其转换为十六进制或八进制形式?我已经搜索了几个小时。请帮忙。
100
4
1110
7/8
(7/8) * 2^4
3.75
{{1}} {{1}}是{{1}} {{1}}
答案 0 :(得分:1)
标志应该是显而易见的。
尾数意味着,1 + 1/2 *第一位+ 1/4 *第二位+ 1/8 *第三位......声音熟悉?它基本上是二进制计数,除了它是'小数点后'。
指数意味着,将mantisa乘以2 ^指数。但是,如何在exponent
中找到它所代表的值?我做了一些谷歌搜索,显然如果顶部位设置,其余的是0
(10,100,1000 ......等),那么你有1
,如果它是101
您有2
等等。如果您011
0
,010
-1
,则表示1
等等。所以在这种情况下,我们有000
指数。
所以在这种情况下你要计算1.875(mantisa)* 2 ^ 1(2 ^指数)并使其为正(符号)。
阅读更多:http://en.wikipedia.org/wiki/Double-precision_floating-point_format(它是双精度大小,但所有原则应该“适用于”任何大小的浮点数)
编辑:这是关于指数的更好解释。
首先,在IEEE浮点数中,指数的最小和最大值具有特殊含义 - 全零表示'这是零或次正规数',所有这些都意味着'这是无穷大或NaN'。所以,即使我们有三位指数 - 111
到001
,只有110
到smallest 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
,因为0100
为4
而1110
为E
。 (请注意我是如何分组的。)
对于八进制,它变为116
,因为01
是1
,001
是1
而110
是6
}。 (注意我是如何分组的,除了第一组之外。)