私はプログラムを書いているので、ハッシュテーブルに数字の対の間の距離を格納する必要があります。 私はレンジR.は、今私は、次のペア間の距離を見つける必要があり範囲が5 されると言うことができます与えられます。2つの整数とビットシフトの組み合わせ
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ビットがあります。私の考えは、私は符号なしlong(64ビット)を取ることでした。
は私が64ビットを有するので、1と5.Now
long k = 1;
k = k<<31;
k+=5;
間の距離をハッシュする必要があると言うことができ、私は最初の31ビットと第31ビットの2番目の数の最初の番号を記憶しています。これにより、ハッシュに使用できる一意のキーが保証されます。
が、私はこれを行うとき:
long k = 2;
k << 31;
k+= 2;
をkの値がゼロになります。
私はこの変化する概念の周りに私の頭を包むことができません。私はacheiveしようとしているものを基本的に
は
An unsigned long has | 32bits | 32 bits |
Store |1st integer|2nd integer|
がどのように私は、各ペアのためのユニークなキーを取得するには、これをacheiveすることができ、ということでしょうか?
言語:C 私は64ビット版のopteronプロセッサでコードを実行しています。 sizeof(ulong)は8を返します。したがって、64ビットです。このような場合、私は長い時間が必要ですか?
また、これが固有のキーを作成するかどうかを知る必要がありますか?私の理解から、ユニークなキーを作成するように見えます。しかし、私は確認が欲しい。
質問に関連する言語タグを追加してください。 –
また、最初の整数を上位32ビットにしたいのであれば、なぜ31ずつシフトしていますか? –
私も32を試しました。だから、私は1をあまりシフトさせて31を試したと思った。推測32が正しいと思った。 –