hash()
Python関数を使用して、オブジェクトから整数ハッシュを取得したいと考えています。しかし、ビルトインhash()
は負の値を与える可能性があり、正のみが必要です。そして、32 ビットと 64 ビットの両方のプラットフォームで適切に動作するようにしたいと考えています。
つまり、32 ビット Python では、~hash()
の範囲の整数を返すことができます。64 ビット システムでは、 ~の範囲の整数を返すことができます。-2**31
2**31 - 1
hash()
-2**63
2**63 - 1
しかし、32 ビット システムではから0
64ビットシステムでは までの範囲のハッシュが必要です。2**32-1
0
2**64-1
32 ビットまたは 64 ビットのターゲット プラットフォームの範囲内で、ハッシュ値を同等の正の値に変換する最善の方法は何ですか?
(コンテキスト:新しいスタイルクラスを作成しようとしています。ドキュメントrandom.Random
によると、シードは「オプションの引数 x は任意のハッシュ可能なオブジェクトにすることができます。」したがって、シードアルゴリズムができないことを除いて、その機能を複製したいと思います負の整数値を処理し、正の値のみを処理します)。random.Random.seed()