【发布时间】:2013-02-10 09:11:57
【问题描述】:
例如我有0 100 1110 sign exponent mantisa 这等于3.75。如何将其转换为十六进制或八进制形式?我已经努力搜索了几个小时。请帮忙。
你能帮我吗100是41110是7/8不可能是(7/8) * 2^4是3.75。
【问题讨论】:
标签: floating-point binary hex octal
例如我有0 100 1110 sign exponent mantisa 这等于3.75。如何将其转换为十六进制或八进制形式?我已经努力搜索了几个小时。请帮忙。
你能帮我吗100是41110是7/8不可能是(7/8) * 2^4是3.75。
【问题讨论】:
标签: floating-point binary hex octal
只需转换位,就好像它是一个整数。忽略您正在处理浮点数的事实。
01001110 转换为十六进制的4E,因为0100 是4 而1110 是E。 (注意我是如何分成四组的。)
八进制也一样,它变成116,因为01 是1,001 是1 和110 是6。 (注意我是如何分成三组的,除了第一组。)
【讨论】:
4E不是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”。因此,即使我们有三位指数 - 000 到 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
【讨论】:
100是41110是7/8不可能是(7/8) * 2^4是3.75。