例如我有0 100 1110
sign exponent mantisa
这个等于3.75
。如何将其转换为十六进制或八进制形式?我已经努力搜索了几个小时。请帮忙。
你能帮我吗?这100
是4
1110
不可能7/8
的。(7/8) * 2^4
3.75
例如我有0 100 1110
sign exponent mantisa
这个等于3.75
。如何将其转换为十六进制或八进制形式?我已经努力搜索了几个小时。请帮忙。
你能帮我吗?这100
是4
1110
不可能7/8
的。(7/8) * 2^4
3.75
标志应该很明显。
尾数的意思是,1 + 1/2*first bit + 1/4*second bit + 1/8*third bit...听起来很熟悉?它基本上是二进制计数,除了它是“小数点后”。
指数意味着,将尾数乘以 2^exponent。但是你如何得到exponent
它所代表的价值呢?我做了一些谷歌搜索,显然如果设置了最高位,其余的是0
(10、100、1000 ...等),那么你有1
,如果它是101
你有2
,等等。意思是如果它是011
你有0
,010
你有-1
等等上。所以在这种情况下,我们有1
指数。
因此,在这种情况下,您要计算 1.875 (mantisa) *2^1 (2^exponent) 并将其设为正数(符号)。
阅读更多:http ://en.wikipedia.org/wiki/Double-precision_floating-point_format (它适用于双精度大小,但所有原则都应该“适用于”任何大小的浮点)
编辑:这是关于指数的更好解释。
首先,在 IEEE 浮点中,指数的最小值和最大值具有特殊含义 - 全零表示“这是零或次正规数”,全一表示“这是无穷大或 NaN”。因此,即使我们有 3 位指数 - 000
to 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
is4
和1110
is E
。(注意我是如何分成四组的。)
八进制也一样,它变成116
,因为01
is 1
,001
is1
和110
is 6
。(注意我是如何分成三组的,除了第一组。)