我有以下问题:我有一个整数元组列表,我必须存储为整数(即(1,1) - > 1,(2,1) - > 2,(1,2) - > 3等)。我必须从整数值中获取元组值,因此无法使用丢失信息的哈希函数。有没有其他快速功能可以做到这一点,或者我必须自己做这个?
非常感谢!
答案 0 :(得分:1)
您可以将两个整数合并为一个__int64整数,方法是首先将它们转换/转换为__int64,然后将其中一个位移到32位并添加它们。
要解码,只需执行相反的操作 - 复制长整数,然后向左移动32个位置,并从原始整数中减去该值。
答案 1 :(得分:1)
这很简单:
__int64 v = ((__int64)first << 32) | ((__int64)second & 0xffffffffL)
和
int first = (int)((v >> 32) & 0xffffffffL)
int second = (int)(v & 0xffffffffL)
或(使用无符号存储类型):
uint64_t v = ((uint64_t)first << 32) | (uint64_t)second
和
int first = (int)(v >> 32)
int second = (int)(v & 0xffffffffL)