c - 如何将int类型转换为ieee754?
问题描述
我在采用整数类型后尝试打印出 IEEE754,但它没有为我显示正确的答案。我想在 main 方法中将整数传递给函数“void ieee(int x)”,然后它将打印出 IEEE754 格式。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int binary(int n, int i)
{
int k;
for (i--; i >= 0; i--)
{
k = n >> i;
if (k & 1)
printf("1");
else
printf("0");
}
}
typedef union
{
int f;
struct
{
unsigned int mantissa : 23;
unsigned int exponent : 8;
unsigned int sign : 1;
} field;
} myfloat;
void ieee(int x)
{
int i;
myfloat var = (myfloat)x;
printf("%d ",var.field.sign);
binary(var.field.exponent, 8);
printf(" ");
binary(var.field.mantissa, 23);
printf("\n");
}
int main()
{
int x = 3;
ieee(x);
return 0;
}
解决方案
您正在 aint
和struct
持有 a 的内部表示的类型之间进行类型双关语float
。
这会给你错误的答案。
如果您想知道整数的浮点表示,可以通过对 进行先前的强制转换来获得正确的结果float
。
int x = 3;
myfloat var;
var.f = (float)x;
binary(var.field.exponent, 8);
binary(var.field.mantissa, 23);
此外,考虑到不能假设 IEEE 浮点表示被用于float
.
例如,请参阅此链接:
另一方面,位域不一定在所有实现中都是连续的。
请参阅位域的缺点。
推荐阅读
- r - 删除 Y 轴标题后图表发生变化
- symfony - FOSOAuthServerBundle + Amazon Alexa:如何使用 Access Token 手动验证用户身份?
- bash - Bash:如何每次从值中减去而不让它重置回原来的值?
- c# - C# - 当标签之间的空格被分隔时反序列化
- python - 使用fuzzywuzzy时如何更有效地比较字符串?
- c++ - 仅传递第二个模板参数的方法
- authentication - 使用 Azure AD 进行身份验证,在最后一步访问 Skype for Business 时失败
- javascript - 覆盖形状的渲染功能
- doctrine-orm - 将实体与 OneToMany 关联持久化后,外键保持为空
- powershell - Powershell 过滤不识别变量