【发布时间】:2022-04-28 05:57:00
【问题描述】:
我有以下生成哈希的按位运算:
(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
我想我在这里遗漏了一些简单的东西,任何帮助表示赞赏。
-
从具有 2^n 位的单个值,您为什么期望能够推断出三具有 2^n 位的值?还是 x, y, z 比散列域小?
-
Z 将始终小于 4。并且 x 和 y 不会大于最大短值。
-
哈希的域是什么?你在这里有一个 long ,但你需要至少 34 位来恢复两个 short 和一个 < 4 的值。
-
是的,域名永远是 Long。 long 是 64 位吗?
标签: java kotlin bit-manipulation bitwise-operators