【问题标题】:Conversion binary floating point to hex floating point将二进制浮点数转换为十六进制浮点数
【发布时间】:2013-02-10 09:11:57
【问题描述】:

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

你能帮我吗100411107/8不可能是(7/8) * 2^43.75

【问题讨论】:

    标签: floating-point binary hex octal


    【解决方案1】:

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

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

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

    【讨论】:

    • 但问题是4E不是3.75。如何将其转换回小数。
    【解决方案2】:

    标志应该很明显。

    尾数的意思是,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”。因此,即使我们有三位指数 - 000111,也只有 001110 表示正常指数 - 这只有 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

    【讨论】:

    • 我知道二进制浮点数,我问的是转换。
    • 哦,那真的很简单,你只是 - 好吧,另一个答案打败了我 :)
    • 你能帮我吗100411107/8不可能是(7/8) * 2^43.75
    • @Robert Kilar:请阅读我的答案。你的问题是不知道有偏见的指数:)
    猜你喜欢
    • 2014-03-01
    • 2010-12-08
    • 2014-11-24
    • 1970-01-01
    • 2016-06-01
    • 2020-07-28
    • 2016-06-02
    • 1970-01-01
    相关资源
    最近更新 更多