-1

我们在课堂上有一个作业,使用 c 从十进制转换为单精度,我完全迷失了。

这是作业:

本实验的最后一部分涉及编写一个简短的 c 算法。每个学生都必须创建一个程序,该程序将科学记数法浮点数作为输入并以二进制和十六进制打印它的 IEE754 单精度值。

程序的输出必须等于以下内容:“引入十进制浮点数(科学记数法):十进制浮点数 1.234500e-04 是十六进制的 3901725B(IEEE 754)。“</p>

到目前为止我们学到的#include 是:stdio.h、math.h 和 string.h,所以我认为我们不允许使用任何其他包含。此外,我们还没有学到structunion或其中任何一个,因为我在其他示例中看到了这些,但我什么都不懂。

如果有人可以指导我完成此代码,我将不胜感激!

4

2 回答 2

1

指导我完成此代码!

由于 OP 只要求提供指南:

  1. 得到一个科学计数法浮点数

研究scanf()和说明"%f"

  1. 以 ... 十六进制打印它的 IEE754 单精度值

研究型双关float语成uint32_t。查看可以将无符号 int 位值复制为浮点数,但浮点值未正确返回给调用者函数并避免指针技巧。请参阅什么是严格的别名规则?

研究printf()和说明"%x"符。

  1. 打印 ... in ... 二进制

很多方法可以打印二进制格式的 printf 转换器吗?.
有些非常通用(基数、2、3、10、16、36...)

于 2018-11-15T13:56:53.753 回答
0

您描述的作业分为三个部分:

  1. 检查数字的字符并将它们转换为浮点数。

  2. 打印浮点数的值。

  3. 打印浮点数的字节。

对于 1,尚不清楚您是打算自己编写代码还是使用库例程。对于库例程,使用scanf(从输入中读取) 或sscanf(从 的数组中读取char)。如果您要自己做,那么在您描述的级别上,我不希望需要一个确切的解决方案。在这种情况下,您可以: 确定每个数字对应的 10 的幂,将数字乘以 10 的幂,然后将乘积相加。例如,使用“1.234500e-04”,您会找到指数“-04”,将其转换为int,然后将 1 乘以pow(10, -5),将 2 乘以pow(10, -6),依此类推,然后将乘积相加。

对于 2,使用 打印printf

对于 3,用于memcpy将字节从 复制float到 a uint32_t(查找标头<stdint.h>)并打印其字节printf(查找标头<inttypes.h>以使用正确的格式说明符)。或者,用于memcpy将字节从 复制float到 的数组中char,然后使用打印十六进制的格式说明符打印charusing 。printf

于 2018-11-15T14:00:01.390 回答