Как упаковать два числа с битовым смещением?
Есть два числа (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