gpt4 book ai didi

c++ - 将 int 转换为 float : how it is done

转载 作者:可可西里 更新时间:2023-11-01 17:04:15 26 4
gpt4 key购买 nike

我刚接触C语言,想请教一个问题。

此处的整数 i 转换为 float ,然后 f(以某种方式)成功表示 5.0:

int i = 5;
float f = i; //Something happened here...

但是如果我们尝试这种方法:

int i = 5;
float f = *(float *)&i;

f 不会得到 5.0,因为它以“ float 方式”解释存储在 i 中的位。那么编译器在第一种情况下实际上做了什么魔术呢?这似乎是一项相当费力的工作......有人可以具体说明吗?谢谢。

最佳答案

这是一项费力的工作,但任何支持 float 的 CPU 都会提供执行此操作的指令。

如果您必须自己将 2 的补码 int 转换为 IEEE 浮点格式,您会:

  • 取以 2 为底的整数对数(与最高位的索引密切相关),它给出了指数。对此进行偏移并将其存储在 float 的指数位中。
  • 将 int 的前 n 位(从第一个设置的非符号位 之后 位开始)复制到 float 的有效位。 nfloat 中的有效位数(32 位单精度 float 为 23)。如果 int 中有任何剩余位(即,如果它大于 224),并且您有余地的下一位是 1,您可能会或可能不会四舍五入,具体取决于操作中的 IEEE 舍入模式。
  • 将符号位从 int 复制到 float

关于c++ - 将 int 转换为 float : how it is done,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11582108/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com