【问题标题】:Converting floats to and displaying Binary Numbers in C在 C 中将浮点数转换为并显示二进制数
【发布时间】:2016-09-08 14:17:46
【问题描述】:

所以我只是在上课的前几天潜入 C 语言。我的教授向我们提出了一个问题/更多的挑战,所以我想我会在这里提出。

float x,y,z;
x = 0.0;
y = 1.0;
z = -2.5;

他希望我们在不使用%x 等的情况下以二进制和十六进制显示这些数字。他还暗示使用联合:

union U {
float y;
unsigned z;
};

提前感谢您的宝贵时间。我只是在寻找有关如何进行这种转换的帮助/解释。

【问题讨论】:

  • 至于unsigned int的大小与float相同...
  • 好吧,语言律师会说教授正在犯罪......
  • 嗯,所以你要求我们你的挑战?那我们可以参加考试了吗?
  • 好的,所以union 只是将浮点编组为整数的提示。现在拿一张纸,看看如何将整数转换为 base-2 或 base-16,然后尝试编写此代码。
  • This 会将任何对象转换为二进制。它不使用"%x"

标签: c binary hex


【解决方案1】:

不违反 严格别名 规则的正确方法是使用 char 数组对浮点数进行别名,这是 C 标准所允许的。

union U {
  float y;
  char c[sizeof (float)];
};

这样,您将能够使用 c 数组访问单个 float y; 字节,并使用可以轻松找到的非常简单的算法将它们转换为二进制/十六进制(我将由您决定) ,因为这是你的任务)。

【讨论】:

  • unsigned charchar 具有可移植性优势,因为char 很少有陷阱值。此外,charsigned ,稍微复杂的转换为十六进制/二进制显示。
  • @chux 我正在考虑编写unsigned,因为它也具有基于转换的优势。但决定将其排除在外以减少噪音..
猜你喜欢
  • 1970-01-01
  • 2017-02-26
  • 2016-12-25
  • 2014-11-24
  • 2017-06-24
  • 2014-10-17
  • 1970-01-01
  • 2011-04-26
  • 2021-07-30
相关资源
最近更新 更多