我想创建一个 int
叫hash
在 Java 中,从坐标 x
, y
和w
.
x
的值和y
有符号且通常为负数。
int
的大小是 32 位。
我想将 4 位分配给 w
(如果最高有效位不可用,则为 3),14 位到 x
和 14 位到 y
.
我尝试了以下方法,但我不明白为什么这些值会发生冲突:w + x << 4 + y << 18
.
例如,x = 1
与 y = 1
冲突当w == 0
.
这样做的优点如下:
- 快速在数据库中查找
- 可以更快地比较单个整数,而不是三个整数
- 无论如何都不会超过为每个整数分配的位数
最佳答案
这里唯一的问题是运算符优先级。 + 位于 << 之前,所以你必须这样写:
w + (x << 4) + (y << 18)
这不会将 w
或 x
限制在其分配的字段中,但这不会对哈希值造成不良影响。如果您使用 |
来组合它们,那么当 w
或 x
为负数时,这将是一个糟糕的哈希,但使用 就可以了+
.
关于java - 基于 3 个不同的整数创建一个唯一的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34358330/