我有一个 union
定义如下:
union V64
{
double f64;
__int64 i64;
unsigned __int64 u64;
};
我想对未知类型的 8 字节值与已知类型的另一个 V64
进行惰性比较(相等和不等)。无论底层类型如何,比较两个 V64
的 i64
是否始终如一地给我预期的结果?例如:
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
在1为负数时崩溃,f64
在值超过double
's int
storage (2^53 +1)时崩溃.比较 i64
似乎可行,但可能有一种情况我没有考虑过。
最佳答案
分配给同一类型的两个成员后,您可以比较它们:
a.f64 = 5.0;
b.f64 = -1.0;
if (a.f64 < b.f64) { /* ... */ }
您只能读取最后写入的 union 成员。因此,您可以比较 a.f64
和 c.u64
,但这只会将两个值提升为 double
。
关于c++ - Union值的单函数比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16091682/