我正在寻找存储4个无符号值,一个布尔(或整数),两个整数与最大(包括)64和一个整数,可以存储至少100,000。成一个单一的散列。Java位掩码编码差异大小的多个整数
使用信息我发现here
我可以编码和解码2之间 - 与255的最大整数的4像这样
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个不同大小的整数编码为一个整数并返回?
布尔值为1位,64位可以存储在6位,100,000位需要17位。最多可以添加30位,因此看起来可以工作。 – markspace
@markspace如果值是非负值,则为true。 – user949300
@ user949300是的,幸运的是,在我使用的场景中,他们只需要进行未签名。 – Greg