Как разделить двоичные данные, чтобы сформировать два разделенных двоичных данных?

Я хочу разделить полученные двоичные данные на два двоичных данных.

Возьмем, к примеру, следующие полученные двоичные данные:

uint32_t data = 0xFFFF0001;

В двоичном формате это: 11111111111111110000000000000001

Если нам нужно разделить этот вышеприведенный двоичный файл на два новых двоичных данных, как это можно сделать?

В качестве примера из 0xFFFF0001, как мы можем получить первые 17 бит как data1 = 111111111111111110, а затем оставшиеся 15 бит как data2 = 000000000000001 ?

, 👍1


1 ответ


Лучший ответ:

2

Вы можете использовать оператор битовый сдвиг и оператор и, например:

uint32_t data = 0xFFFF0001;

Следующая строка сдвинет все биты на 15 позиций вправо, то есть 15 наименее значащих битов будут удалены, а остальные биты сдвинуты вправо.

uint32_t dataLeft = data >> 15;

11111111111111110000000000000001
>>>>>>>>>>>>>>>11111111111111110000000000000001
| Bit shift   || orig. bits    ||Removed bits |

Для остальных 15 бит вы можете использовать оператор and, который просто превращает все 1 в 0 для тех битов, которые не входят в битовую маску (0x7FFF).

uint16_t dataRight = data & 0x7FFF;

value:              11111111111111110000000000000001
bit mask (0x7FFF):  00000000000000000111111111111111
                    -------------------------------- & / AND
                    00000000000000000000000000000001 
,