假设我有一个 union 定义为:
typedef union{
double d;
int i;
} dtoi;
如果我想将一个double类型转换成一个int类型,我有以下函数:
int doubleToInt(double d){
dtoi dToI;
dToI.d = d;
return dToI.i;
}
后来我有另一个函数将它转换回 double:
double intToDouble(dtoi dToI){
return dToI.d;
}
这行得通吗?现在我想我得到了错误的双倍值(value)。我想我不太明白 union 和将 union 作为参数跨函数和模块传递是如何工作的。
最佳答案
没有。这是行不通的。一方面,int
通常是 32 位,double
通常是 64 位。另一方面,浮点值基本上被分成位域,有这么多位保存尾数,这么多人拿着指数,一个人拿着符号。另一方面,整数只是数字的 base-2 表示。他们的位只是排列不一样。
要将 double 'd' 正确转换为 int,请尝试 int i = (int)d;
并反过来:double d = (double)i;
.这些实际上将值从一种格式转换为另一种格式。 union 只是重新解释现有位。
关于使用 union 将 double 转换为 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34796424/