2

以下是有效的表示吗?我知道字节顺序,这是一个 Windows 环境。如果我定义Int32Double myVar;如果是计算值,将myVar.int32.low始终相同? 例如:myVar.d
myVar.d = 0.4 * log(4); printf("%08X\n", myVar.int32.low);

union Int32Double
{
    struct
    {
        int low;
        int high;
    } int32;

    double d;
};
4

2 回答 2

3

不,这是写入d和读取int32.

于 2012-11-12T21:29:00.690 回答
2

首先,整数类型和浮点类型的对象表示通常非常不同。将对象的任何部分重新解释doubleint对象通常不会产生任何类似于原始值的double值。结果不会有意义,除非你真的知道你在做什么。如果确实知道自己在做什么,则可以使用无符号整数类型进行重新解释。

其次,在 C++ 中使用联合进行内存重新解释是非法的。它会导致未定义的行为。C99 规范的最新技术更正之一实际上使其在 C 语言中合法(当然,具有实现定义的行为,只要我们不尝试访问陷阱表示)。但是 AFAIK 它还没有在 C++ 中。因此,使用风险自负。

PS我不确定你的“将永远是一样的”是什么意思......

于 2012-11-12T21:47:27.863 回答