Вот что я пытаюсь сделать:
У меня есть два целых числа
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.
Также я хотел бы прочитать эти цифры после их написания.
Как я могу это сделать?
Спасибо за ваши предложения.
Предполагая, что это двоичные представления чисел и предполагая, что вы действительно хотели иметь пять нулей справа от 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;
Вы можете сделать это с С ++ битовые поля:
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