用于存储键和值对的按位黑客技术

时间:2015-07-22 19:01:34

标签: algorithm bit-manipulation

如果我想存储(Value, key) pair in priority list我遇到了这个按位黑客

代码:

q.add(((long) value << 32) + index);

取回值:

  long cur = q.remove();
  int get_back_index = (int) cur;
  int get_back_value = cur>>>32;

我无法理解这是怎么回事请解释这背后的逻辑。

1 个答案:

答案 0 :(得分:3)

它将'value'的位移到左边,并添加'index'的位。

例如,如果您将它们视为十进制数字,您可以将值乘以10000以将其向左移动4位数(基本上用4个零点右键填充它。

因此,使用公式123 * 10000 + 456,可以将123的“值”和456的索引组合到数字1230456中。要提取数字,请将正确的部分(0456)用于索引,并除以数字乘以10000来取回价值。

此代码或多或少相同,仅适用于32位二进制数字而不是4位十进制数字。 <<向左移动,>>向右移动。向左移位32位相当于乘以2 ^ 32,右移是划分。

Casting to int基本上是截断值。组合值为64位,int为32位,因此通过将其转换为整数,可以丢弃64位值的一半。