如果我想存储(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;
我无法理解这是怎么回事请解释这背后的逻辑。
答案 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位值的一半。