私はプログラムを書いています。数値のペア間の距離をハッシュテーブルに保存する必要があります。
範囲 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ビットがあります。私の考えは、私は unsigned long (64 ビット) を取るということでした。
1 から 5 の間の距離をハッシュする必要があるとしましょう。
long k = 1;
k = k<<31;
k+=5;
64 ビットなので、最初の数値を最初の 31 ビットに格納し、2 番目の数値を次の 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
ですか?
また、これが一意のキーを作成するかどうかを知る必要がありますか? 私の理解では、一意のキーを作成しているようです。しかし、私は確認が欲しいです。