Floating point 二进制浮点到十六进制浮点的转换

Floating point 二进制浮点到十六进制浮点的转换,floating-point,binary,hex,octal,Floating Point,Binary,Hex,Octal,例如,我有0100110符号指数mantisa这等于3.75。如何将其转换为十六进制或八进制格式?我已经苦苦搜寻了几个小时了。请帮忙 你能帮我一下吗100是4是1110是7/8不可能是(7/8)*2^4是3.75 信号应该是明显的 尾数意味着,1+1/2*第一位+1/4*第二位+1/8*第三位。。。听起来熟悉吗?它基本上是二进制计数,除了“小数点后” 指数意味着将mantisa乘以2^指数。但是如何将指数中的位转换为它所代表的值呢?我在谷歌上搜索了一下,很明显,如果设置了最上面的位,剩下的是0(

例如,我有
0100110
符号指数mantisa
这等于
3.75
。如何将其转换为十六进制或八进制格式?我已经苦苦搜寻了几个小时了。请帮忙


你能帮我一下吗
100
4
1110
7/8
不可能是
(7/8)*2^4
3.75

信号应该是明显的

尾数意味着,1+1/2*第一位+1/4*第二位+1/8*第三位。。。听起来熟悉吗?它基本上是二进制计数,除了“小数点后”

指数意味着将mantisa乘以2^指数。但是如何将
指数中的位转换为它所代表的值呢?我在谷歌上搜索了一下,很明显,如果设置了最上面的位,剩下的是
0
(101001000…,等等),那么你就有
1
,如果是
101
,你就有
2
,等等。这意味着如果是
011
,你就有
0
010
你有
-1
,等等。在这种情况下,我们有指数
1

因此,在本例中,您需要计算1.875(mantisa)*2^1(2^指数),并使其为正(符号)

阅读更多:(这是针对双精度大小,但所有原则都应“适用”于任何大小的浮点)

编辑:这里有一个关于指数的更好的解释

首先,在IEEE浮点数中,指数的最小值和最大值具有特殊含义-全零表示“这是一个零或低于正常值的数字”,全1表示“这是无穷大或NaN”。因此,即使我们有三位指数-
000
111
,但只有
001
110
表示正常指数-这只有6个值

现在,一种叫做“指数”偏差的东西被用来将这个1…6范围转换成负值和正值-特别是,你想要一个-2…3范围(最大正指数>最大负指数的大小,因此不能通过执行1/
最小规范化数
来获得溢出。但是,1/
非规范化数
可以产生
无穷大

我们通过取指数中的值得到它,如果这不是一个特例,我们从它的二进制值中减去3,并把它作为它的指数值

0101110
因此

0
->正号

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

1110
->1+7/8


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

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

01001110
转换为十六进制形式的
4E
,因为
0100
4
1110
E
(注意我是如何四个一组的。)


对于octal来说也是一样的,它变成了
116
,因为
01
1
001
1
110
6
(注意我是如何分成三组的,第一组除外。)

我知道如何获取二进制浮点,我问了转换的问题。哦,那真的很简单,你只是-嗯,另一个答案比我快:)你能帮我一下吗
100
4
1110
7/8
不可能是
(7/8)*2^4
3.75
@Robert Kilar:请阅读我的退出答案。你的问题是不知道有偏指数:),但问题是
4E
不是3.75。如何将其转换回十进制。