我正在编写一个程序,我必须将数字对之间的距离存储在哈希表中。
我将得到一个 Range R。假设范围是 5。现在我必须找到以下对之间的距离:
1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5
也就是说,对的总数是(R^2/2 -R)。我想将它存储在哈希表中。所有这些都是无符号整数。所以有32位。我的想法是,我采用无符号长整数(64 位)。
假设我需要散列 1 和 5 之间的距离。现在
long k = 1;
k = k<<31;
k+=5;
因为我有 64 位,所以我将第一个数字存储在前 31 位中,将第二个数字存储在第二个 31 位中。这保证了唯一的键,然后可以用于散列。
但是当我这样做时:
long k = 2;
k << 31;
k+= 2;
k 的值变为零。
我无法理解这个不断变化的概念。
基本上我想要实现的是,
An unsigned long has | 32bits | 32 bits |
Store |1st integer|2nd integer|
如何实现这一点以获得每对的唯一密钥?
我在 64 位 AMD Opteron 处理器上运行代码。 sizeof(ulong)
返回 8。所以它是 64 位。long long
在这种情况下我需要一个吗?
我还需要知道这是否会创建唯一键?据我了解,它似乎确实创建了唯一的键。但我想要一个确认。