首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储密钥和值对的按位黑客技术

存储密钥和值对的按位黑客技术
EN

Stack Overflow用户
提问于 2015-07-22 19:01:34
回答 1查看 81关注 0票数 0

如果我想存储一个(Value, key) pair in priority list,我会遇到这个按位排列的黑客

代码:

代码语言:javascript
复制
q.add(((long) value << 32) + index);

要返回值:

代码语言:javascript
复制
  long cur = q.remove();
  int get_back_index = (int) cur;
  int get_back_value = cur>>>32;

我不明白这是怎么回事,请解释一下背后的逻辑。

EN

回答 1

Stack Overflow用户

发布于 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位值的一半。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31571810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档