基于3个不同的整数创建唯一的整数

时间:2015-12-18 14:55:10

标签: java hash int bit-manipulation bit-shift

我想在坐标inthashx中用Java创建一个名为y的{​​{1}}。

wx的值已签名且通常为负数。

y的大小为32位。

我想将4位分配给int(如果最高有效位不可用则为3位),将14位分配给w,将14位分配给x。< / p>

我尝试了以下方法,但我不明白为什么值会发生冲突:y

例如,w + x << 4 + y << 18x = 1y = 1发生冲突。

这样做的好处如下:

  • 快速查询数据库
  • 更快速地比较一个整数,而不是三个整数
  • 无论如何都不会超过每个整数的分配位数

2 个答案:

答案 0 :(得分:2)

这里唯一的问题是运营商优先级。 +在&lt;&lt;之前,所以你必须这样写:

w + (x << 4) + (y << 18)

这并不会将wx限制在他们分配的字段中,但这并不会使用哈希值做坏事。如果您使用|来组合它们,那么当wx获得否定时,这将是一个错误的哈希值,但+它很好。

答案 1 :(得分:1)

您的问题是运算符优先级+优先于<<,因此您的表达式

w + x << 4 + y << 18

相当于

((w + x) << (4 + y)) << 18

试试这个:

w + (x << 4) + (y << 18)
相关问题