使用 union 将 double 转换为 int?

标签 c unions

假设我有一个 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/

相关文章:

c - 如何找到二叉搜索树右子树中的最小值

c - 使用字符指针复制字符串

c++ - 为什么线程创建方法需要一个参数?

c++ - 将 union 字段中的位解释为 C/C++ 中的不同数据类型

c - 确定用户输入值的数据类型

c - SystemVerilog DPI-C 指针

c - 如何存储变量a的值

c - Union 在 C 中不打印正确的值

c - 是否通过 C99 中未指定的 union 进行类型双关,并已在 C11 中指定?

c - C 中的结构和 union ,确定大小和访问成员