Как писать и читать байты из неподписанной переменной

Вот что я пытаюсь сделать:

У меня есть два целых числа

int a = 0; // can be 0 or 1
int b = 3; // can be 0, 1, 2 or 3

Тоже хочу иметь

unsigned short c

хранить эти переменные внутри него.

Например, если я буду хранить внутри с это будет выглядеть так:

00000000
^ here is a

Тогда мне нужно хранить б внутри гр. И это должно выглядеть следующим образом:

011000000
^^ here is b.

Также я хотел бы прочитать эти цифры после их написания.
Как я могу это сделать?

Спасибо за ваши предложения.

0

Решение

Предполагая, что это двоичные представления чисел и предполагая, что вы действительно хотели иметь пять нулей справа от b

01100000
^^ here is b

(то, как у вас есть a и b перекрываются)

Тогда это как это сделать

// write a to c
c &= ~(1 << 7);
c |= a << 7;

// write b to c
c &= ~(3 << 5);
c |= b << 5;

// read a from c
a = (c >> 7)&1;

// read b from c
b = (c >> 5)&3;
3

Другие решения

Вы можете сделать это с С ++ битовые поля:

struct MyBitfield
{
unsigned short a : 1;
unsigned short b : 2;
};
MyBitfield c;
c.a = // 0 or 1
c.b = // 0 or 1 or 2 or 3
0