【问题标题】:Convert negative decimal to hexadecimal floating point将负十进制转换为十六进制浮点
【发布时间】:2016-06-02 17:17:44
【问题描述】:

我正在尝试将 -75 转换为十六进制浮点数。这个浮点数由 1 个符号位、5 个指数位、10 个尾数位和偏差 = 15 组成。我能够将 -75 转换为 F 0000E 4B00000000。但我不完全确定隐藏位系统如何以这种十六进制表示法工作?我怀疑它不存在,因为二进制系统中有 16 个不同的十六进制数字(0-F)而不是 2 个(0-1)。

这就是我所做的:

-75 -> sign = -, so sign-bit = F. 
75 -> hexadecimal value = 4B. 
Normalise -> 4,B . 10^(-1). 
Exponent -> -1 + bias = -1 + 15 = 14 => 0000E. 
The complete floating point becomes:  F 0000E 4B00000000.

这对吗?

【问题讨论】:

  • 你想用什么编程语言来做这个?您可能应该将其包含在问题的文本中并作为标签。
  • “十六进制浮点”是什么意思? IEEE-754 格式的十六进制表示是 C2960000 代表 -75.0fC052C00000000000 代表 -75.0,如果这就是你要问的。
  • 它不适用于任何编程语言。这是理论上的转换。而且我不是在寻找 IEEE754 中的十六进制表示,而是在我在帖子中描述的系统中。我知道这很令人困惑,但我想完全理解这些转换:)。感谢您迄今为止的帮助
  • 您是正确的,隐藏位仅适用于标准化二进制浮点。这取决于已知不为零的二进制数字必须是一的想法。我使用的是十六进制浮点系统,它没有隐藏位。
  • 更一般地说,您似乎有太多位。总宽度为 16 位(1+5+10),应该只有 4 个十六进制数字。

标签: floating-point hex type-conversion


【解决方案1】:

正如 Patricia Shanahan 在 cmets 中对您的问题所说的那样,“位”不太可能被解释为完整的十六进制数字。据我所知,位始终是“binary digitt”。

您描述的格式只有 16 位。那只是 4 个十六进制数字。

事实上,您的格式听起来与half-precision 完全一样,也称为binary16

我建议你先把它作为一个二元问题来解决。你得到 16 位 bb...b:

bbbbbbbb bbbbbbbb
\  /\  / \  /\  /
 ¯¯  ¯¯   ¯¯  ¯¯

然后将 16 个二进制数字分成四组,得到四个十六进制数字。

免责声明:我们无法确定您想到的数字格式,所以我的解决方案是一种合格的猜测。

【讨论】:

  • 我不清楚的数字格式的唯一部分是十六进制点落在有效数字中的位置。这会影响无偏指数是一还是二。 cmets 建议该点位于最高有效数字的右侧。我使用的十六进制格式在标准化后具有十六进制点右侧的最高有效数字。见BM Floating Point Architecture
猜你喜欢
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
  • 2013-10-30
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
相关资源
最近更新 更多