将三个值解包到一个 Long 中
Unpacking three values packed into a Long
我有以下生成散列的按位运算:
(z shl 28) or (y shl 14) or x // (z << 28 | y << 14 | x) in java
我希望能够从上面计算的散列中推导出 x、y 和 z。我每次都能得到 Z 和 X,但我很难得到 Y - 它只是偶尔有效。
Z 永远小于 4。x 和 y 不会大于最大空值。
这就是我正在做的事情:
val hash = 684297131L // sample hash
val z = hash shr 28
val y = hash shr 14 // this works only sometimes
val x = hash and 0xfff
我想我在这里遗漏了一些简单的东西,感谢任何帮助。
您的“散列”看起来不太像散列。看起来更像是把3个字段打包成一个long。
您可以获得 x
、y
和 z
,它们会产生相同的“散列”,如下所示:
val z = hash shr 28
val y = (hash shr 14) and 0x3fff
val x = hash and 0x3fff
这可能正是您想要的。有不同的数字可以产生相同的哈希值,但这些是最简单的。
我有以下生成散列的按位运算:
(z shl 28) or (y shl 14) or x // (z << 28 | y << 14 | x) in java
我希望能够从上面计算的散列中推导出 x、y 和 z。我每次都能得到 Z 和 X,但我很难得到 Y - 它只是偶尔有效。
Z 永远小于 4。x 和 y 不会大于最大空值。
这就是我正在做的事情:
val hash = 684297131L // sample hash
val z = hash shr 28
val y = hash shr 14 // this works only sometimes
val x = hash and 0xfff
我想我在这里遗漏了一些简单的东西,感谢任何帮助。
您的“散列”看起来不太像散列。看起来更像是把3个字段打包成一个long。
您可以获得 x
、y
和 z
,它们会产生相同的“散列”,如下所示:
val z = hash shr 28
val y = (hash shr 14) and 0x3fff
val x = hash and 0x3fff
这可能正是您想要的。有不同的数字可以产生相同的哈希值,但这些是最简单的。