如果我想存储一个(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;我不明白这是怎么回事,请解释一下背后的逻辑。
发布于 2015-07-22 19:10:03
它将“value”的位移到左边,并添加“index”的比特。
例如,如果你把它们看作十进制数,你可以把一个值乘以10000,把它往左移4位(基本上是用4个零来填充它)。
因此,使用公式123 * 10000 + 456,可以将“值”123和指数456组合到数字1230456中。要提取数字,请取索引的正确部分(0456),并将该数字除以10000以获得值。
此代码所做的操作大致相同,仅用于32位二进制数字,而不是4位小数。<<在向左移动,>>在向右移动。左移32位相当于乘2^32,右移等于除法。
强制转换为int基本上是截断了值。组合值为64位,int为32位,因此通过将其转换为整数,可以丢弃64位值的一半。
https://stackoverflow.com/questions/31571810
复制相似问题