我正在尋找存儲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