C ++: Как получить MSB (самый значимый бит) набора битов (используя побитовые операторы)? - PullRequest
1 голос
/ 14 апреля 2020

Я пытаюсь преобразовать десятичное число в набор битов длины 27, а затем извлечь MSB (самый левый бит) из этого набора битов, используя побитовые операторы. Например, число 67108865 выражается как 100000000000000000000000001, а MSB - 1. Другим примером является число 1, которое выражается как 000000000000000000000000001, а MSB - 0.

Ниже приведен мой код C ++:

unsigned int value = 67108865;
bitset<27> bs(value);
int most_significant_bit = bs >> (sizeof(value)*8 - 1) & 1;
cout << most_significant_bit << endl;

Однако я получаю следующее ошибка:

ошибка: нет совпадения для оператора & (типы операндов: 'std :: bitset <27>' и 'int') int most_significant_bit = bs >> (sizeof (значение) * 8 - 1) & 1;

Как бы я получил MSB, используя побитовые операторы?

Ответы [ 2 ]

4 голосов
/ 15 апреля 2020

Просто используйте operator[], чтобы получить самый старший бит.

bitset<27> bs(value);
int ms_bit = bs[bs.size()-1];
2 голосов
/ 15 апреля 2020

Это даст вам самый значимый бит:

auto msb = bs[bs.size()-1];

Чтобы сделать это с помощью побитовых операторов, вам нужно сначала преобразовать битовый набор в unsigned long, используя to_ulong() или unsigned long long с использованием to_ullong():

auto msb = bs.to_ulong() >> (bs.size() - 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...