Как упаковать два числа с битовым смещением?

Есть два числа (A - byte, B - ushort), нужно упаковать в int32 или short таким образом: в первые 3 бита записать A (число по определению будет не более 3 бита, даже если byte из 8 битов). А затем с 4 бита записать значение B. До конца не разобрался с операторами << и >>, как это сделать? И как это потом распаковать?


Ответы (1 шт):

Автор решения: MBo
(A & 7) | (B << 3)

или, что то же самое:

(A & 0b111) | (B << 3)

Здесь подразумевается, что "первые 3 бита" - младшие, и "с 4 бита" использует нумерацию с единицы

Распаковка

A = C & 0b111
B = C >> 3                для unsigned С
B = (C >> 3) & 0x1FFF     для signed С (если почему-то требуется хранить в нём)
0x1FFF =  0b00011...11
→ Ссылка