Я предполагаю, что вы намереваетесь упаковать три шестибитовых значения в один int
, в этом случае:
public int pack(int v1, int v2, int v3) {
return (v3 & 0x3f) << 0 |
(v2 & 0x3f) << 6 |
(v1 & 0x3f) << 12;
}
public void unpack(int n) {
int v3 = (n >> 0) & 0x3f;
int v2 = (n >> 6) & 0x3f;
int v1 = (n >> 12) & 0x3f;
// do stuff with v1, v2, v3
}
Это функционально почти так же, какВаш код, если честно, но я надеюсь, что цель несколько яснее.
Операции << 0
и >> 0
должны быть оптимизированы компилятором, но показаныза "симметрию"