0

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

你能帮我吗?这1004 1110不可能7/8的。(7/8) * 2^43.75

4

2 回答 2

1

标志应该很明显。

尾数的意思是,1 + 1/2*first bit + 1/4*second bit + 1/8*third bit...听起来很熟悉?它基本上是二进制计数,除了它是“小数点后”。

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

因此,在这种情况下,您要计算 1.875 (mantisa) *2^1 (2^exponent) 并将其设为正数(符号)。

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

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

首先,在 IEEE 浮点中,指数的最小值和最大值具有特殊含义 - 全零表示“这是零或次正规数”,全一表示“这是无穷大或 NaN”。因此,即使我们有 3 位指数 - 000to 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

于 2013-02-10T09:18:06.810 回答
1

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

01001110转换为4E十六进制,因为0100is41110is E。(注意我是如何分成四组的。)

八进制也一样,它变成116,因为01is 1001is1110is 6。(注意我是如何分成三组的,除了第一组。)

于 2013-02-10T09:22:45.607 回答