gpt4 book ai didi

Java 位掩码编码多个大小不同的整数

转载 作者:行者123 更新时间:2023-11-30 06:29:52 25 4
gpt4 key购买 nike

我希望存储 4 个无符号值、一个 boolean 值(或 int)、两个最大为(含)64 的整数和一个可以存储至少 100,000 的整数。到单个哈希中。

使用我找到的信息here

我可以像这样编码和解码 2 - 4 个整数,最多 255

static int encode(int a, int b, int c, int d) {
return a & 0xff | (b << 8) | (c << 16) + (d << 24);
}

static int[] decode(int encoded) {
return new int[] {
encoded & 0xff,
(encoded >> 8 & 0xff),
(encoded >> 16 & 0xff),
(encoded >> 24 & 0xff)
};
}

并使用发现的信息here我可以对两个 32 位整数进行编码和解码。

long hash = (long) a << 32 | b & 0xFFFFFFFFL;
int aBack = (int) (hash >> 32);
int bBack = (int) hash;

我只是不太了解按位运算符,无法弄清楚如何混合和匹配来存储不同大小的整数。

如何使用位掩码将 4 个不同大小的整数编码为一个整数并返回?

最佳答案

我不会将其称为哈希,因为它被设计为可逆的,但它可以用作哈希。

例如,为各个部分分配一些位置(我现在将中间部分每个设置为 7 位,因为它们显然达到并包括 64 位):

  • a(位0)
  • uint7 b(位 1 到 7)
  • uint7 c(位 8 到 14)
  • 其余 d(15 到 31)

我假设所有值都是非负的,因为它看起来就是您的意思(例如仅指定上限)。

要编码,请将每个字段向左移动其偏移量并组合,例如:

int res = a | (b << 1) | (c << 8) | (d << 15);

要解码,请按字段偏移量和掩码右移:

a = x & 1;
b = (x >> 1) & 0x7F;
c = (x >> 8) & 0x7F;
d = (x >> 15) & 0x1FFFF;

d 有 17 位可用,这足以满足其范围。对于 d 的高值,res 将为负数。

关于Java 位掩码编码多个大小不同的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46391908/

25 4 0
文章推荐: java - 西类牙字符和 URISyntaxException
文章推荐: javascript - 使用 CanvasRenderer 在 three.js 中绘制线条比 WebGLRenderer 绘制的线条更平滑
文章推荐: javascript - 将谷歌地图复制到页面上单独的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com