![](/img/trans.png)
[英]Reinterpret bytes as float in C (IEEE 754 single-precision binary)
[英]Decimal to IEEE 754 Single-precision IEEE 754 code using C
我们在课堂上有一个作业,使用 c 从十进制转换为单精度,我完全迷失了。
这是任务:
本实验的最后一部分涉及编写一个简短的 c 算法。 每个学生都必须创建一个程序,将科学记数法浮点数作为输入并以二进制和十六进制打印它的 IEE754 单精度值。
程序的输出必须等于以下内容: “引入十进制浮点数(科学记数法):十进制浮点数 1.234500e-04 是十六进制的 3901725B(IEEE 754)。 “
到目前为止我们学到的#includes 是:stdio.h、math.h 和string.h,所以我认为我们不允许使用任何其他包含。 此外,我们还没有学习struct
或union
或其中任何一个,因为我在其他示例中看到了这些,但我什么都不明白。
如果有人可以指导我制作此代码,我将不胜感激!
指导我制作此代码!
由于 OP 只要求提供指南:
研究scanf()
和"%f"
说明符
研究类型将float
转换为uint32_t
。 查看可以将 unsigned int 位值复制为浮点数,但浮点值未正确返回给调用者函数并避免指针技巧。 请参阅什么是严格的别名规则?
研究printf()
和"%x"
说明符。
有很多方法可以打印二进制格式的 printf 转换器吗? .
有些非常一般(基数,2,3,10,16,36...)
您描述的作业分为三个部分:
检查数字的字符并将它们转换为浮点数。
打印浮点数的值。
打印浮点数的字节。
对于 1,不清楚您是打算自己编写代码来执行此操作还是使用库例程。 对于库例程,使用scanf
(从输入读取)或sscanf
(从char
数组读取)。 如果您要自己做,那么,在您描述的级别上,我不希望需要一个确切的解决方案。 在这种情况下,您可以: 确定每个数字对应的十的幂,将数字乘以十的幂,然后对乘积求和。 例如,对于“1.234500e-04”,您会找到指数“-04”,将其转换为int
,然后将 1 乘以pow(10, -5)
,将 2 乘以pow(10, -6)
,依此类推,然后添加产品。
对于 2,使用printf
打印。
对于 3,使用memcpy
将字节从float
复制到uint32_t
(查找标头<stdint.h>
)并使用printf
打印其字节(查找标头<inttypes.h>
以获取要使用的正确格式说明符) . 或者,使用memcpy
将字节从float
复制到char
数组中,然后使用printf
和打印十六进制的格式说明符打印char
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.