【问题标题】:Representing Float into Binary将浮点数表示为二进制
【发布时间】:2015-12-02 10:30:31
【问题描述】:

所以我最近学习了将浮点数表示为二进制字符串的方法,我遇到了一个非常烦人的困惑。

假设我有浮点数 10.25。在二进制中,这将是 1010.01

取指数,这将是 1.01001 x 2^(3)。 所以符号位为0,指数为127 + 3的无符号8位二进制, 这将成为 10000010。 现在对于小数部分,这应该是 00000000 00000000 0001001(23 位)

把它们放在一起,0 10000010 00000000 00000000 0001001。

但是当我把它放到一个转换网站上时,它给了我这个: 似乎尾数部分已被每 8 位翻转,可能是因为小端实现。但事情就是这样。

从大端尾数 00000000 00000000 0001001,

Little Endian Mantissa 不应该是 10010000 00000000 0000000 吗?

图片说二进制字符串是0 10000010 0100100 00000000 00000000

【问题讨论】:

  • 如果我是对的,大端和小端转换仅适用于无符号整数。浮动管理有很多标准,可能小端和大端系统不使用相同的标准。
  • 您是指float 还是decimal number?将您的数字分成整数和小数部分。分别将每个转换为二进制字符串数字,然后将它们放在一起。

标签: c floating-point


【解决方案1】:

正如你所写的那样

  • 标志是0
  • 指数是10000010
  • 尾数为01001000000000000000000(添加了几个尾随的 0 以填充 32 位模式)

将这些部分放在一起,我们得到了

01000001001001000000000000000000

现在,将位排列成字节,我们有

01000001001001000000000000000000

这正是 10.25 根据 IEEE 754 单精度格式的表示。在大端机器中,4 个字节或按上述顺序排列,而在小端机器中,它们按相反的方式排列。那是

  • 10.25 在大端机器中是 01000001 00100100 00000000 00000000
  • 10.25 在小端机器中是 00000000 00000000 00100100 01000001

IEEE 754 standard 指定

  • 第一位代表符号
  • 接下来的 8 位代表指数
  • 剩余位表示尾数减 1

如果 m1..m23 是组成尾数的位,则 m1 的重量为 2^-1,m23 的重量为 2^-23。
简单来说,就是标准决定了每一位的含义。

【讨论】:

  • 我的困惑是,为什么尾数首先是 01001000 00000000 0000000?我们有 10.25 = 1010.01 = 1.01001 x 2^3,那么 23 位尾数不应该是 00000000 00000000 0001001 吗?为什么 01001 会出现在 23 位尾数的前半部分?
  • @user3467433 你同意吗,如果有人给你 32 个空格来填写 decimal 数字 3.1415926,你会写成 3141592600000000000000000000000not 3000000000000000000000001415926,因为它们是不同的数字?
  • 哦,我只是误解了 IEEE 754 标准的尾数部分。
猜你喜欢
  • 2017-06-16
  • 2016-05-01
  • 1970-01-01
  • 2016-01-01
  • 2014-02-10
  • 1970-01-01
  • 2018-04-10
  • 2023-04-06
  • 1970-01-01
相关资源
最近更新 更多