【问题标题】:C float from binaryC从二进制浮点数
【发布时间】:2013-01-09 15:52:40
【问题描述】:

我正在努力学习 C,现在我是一个花车。我知道所有值在不同的机器上都有不同的大小。但我正在努力学习这个概念。

假设一个浮点数保存在 4 个字节中。我读到第一位是符号位,它决定数字是正数还是负数。然后接下来的 7 位是指数,其余(23 位)是尾数。这可能是这样的: 1 010 1001 0000 0000 1011 1001 0000 111

但这如何转化为浮点数?我可以阅读二进制文件,但我看不到它背后的公式:)。有人可以向我解释一下这个,或者它是如何工作的吗?

【问题讨论】:

标签: c floating-point


【解决方案1】:

这是我几年前写的。
我认为它应该可以帮助您了解浮点数的表示方式:

http://www.eosgarden.com/en/articles/float/

归一化数字的公式基本上是:-1^S * 1.M * 2^( E - 127 ),其中S是符号,M是尾数, E 指数。但一切都在上一个链接中进行了详细说明。

【讨论】:

  • 谢谢!我唯一有点卡住的部分是:从你的文章中引用你从这个 -10 · 1.0111 · 22 到这个 在数学上,这意味着:1 · ( 1 · 20 + 0 · 2-1 + 1 · 2 -2 + 1 · 2-3 + 1 · 2-4 ) · 22 ( 20 + 2-2 + 2-3 + 2-4 ) · 22 22 + 20 + 2-1 + 2-2 4 + 1 + 0.5 + 0.25
  • 猜猜我的数学不太好,无法在没有提示的情况下进行跳跃
  • 尾数是用二进制科学计数法表示的,所以这是实际值的计算。对于一个普通的二进制数,公式是:( bit_1_value * 2 ^ bit_1_position ) + ( bit_2_value * 2 ^ bit_2_position ) + ...。但由于这是科学记数法,而且我们有逗号,所以位位置值会递减,因此是 -1、-2 等。
  • 请原谅我缺乏阅读。你的文章说了这么多,我只是像个傻瓜一样读它。 =) 再次感谢您
  • 不用担心 :) 很高兴知道这篇文章很有帮助。
【解决方案2】:

指数中有 8 位: 看到eeee emmm mmmm mmmm mmmm mmmm mmmm

公式为: (-1)^s * 1.M * 2^(E - 127)

我用大 M 和 E 分别代表所有 m 和 e 位。 M部分为二进制,E部分为十进制。

【讨论】:

    猜你喜欢
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 2017-01-05
    相关资源
    最近更新 更多