我的union
定义如下:
union V64
{
double f64;
__int64 i64;
unsigned __int64 u64;
};
我想对未知类型的8字节值与已知类型的另一个V64
进行惰性比较(相等和不等)。比较两个i64
的{{1}}是否会始终给出预期的结果,无论基础类型如何?例如:
V64
比较V64 a.u64 << 9007199254740993+500; //pseudo-code reading raw bytes
V64 b.u64 << -9007199254740993-501; //pseudo-code reading raw bytes
if(a.i64 > b.i64)
{/*do stuff*/}
,如果一个为负数,则u64
分解,当值超过double
's int
storage (2^53 +1)时,f64
就会分解。比较i64
似乎有效,但可能有一个案例我没有考虑过。
答案 0 :(得分:4)
分配给同一类型的两个成员后,您可以比较它们:
a.f64 = 5.0;
b.f64 = -1.0;
if (a.f64 < b.f64) { /* ... */ }
您只能读取上次写入的联盟成员。因此,您可以比较a.f64
和c.u64
,但这只会将两个值都提升为double
。