Установить индивидуальный бит в C ++ - PullRequest
4 голосов
/ 29 июня 2010

У меня есть 5-байтовый элемент данных, и мне нужна помощь в выяснении, как в C ++ установить отдельный бит одного из этих байтов;Пожалуйста, посмотрите мой пример кода ниже:

char m_TxBuf[4]; 

Я хотел бы установить бит 2 на старший бит m_TxBuf[1].

00000 0 00
      ^ This one

Любая поддержка очень ценится;Спасибо!

Ответы [ 6 ]

14 голосов
/ 29 июня 2010

Битовые операторы в C ++ .

"... установить бит 2 ..."

Порядковый бит .

I would like to set bit 2 to high of byte m_TxBuf[1];

m_TxBuf[1] |= 1 << 2

4 голосов
/ 29 июня 2010

Вы можете использовать побитовое или (|) для установки отдельных битов и побитовое и (&) для их очистки.

3 голосов
/ 29 июня 2010
int bitPos = 2;  // bit position to set
m_TxBuf[1] |= (1 << bitPos);
3 голосов
/ 29 июня 2010
m_TxBuf[1] |= 4;

Чтобы установить бит, вы используете побитовое или. Выше используется составное назначение, что означает, что левая сторона является одним из входов и выходов.

1 голос
/ 29 июня 2010

Обычно мы устанавливаем биты, используя побитовый оператор ИЛИ (оператор | или оператор | = как сокращение).

Предполагается, что 8-битный байт (где MSB считается 7-м битом, а LSB считается 0-м: MSB 0) для простоты:

char some_char = 0;
some_char |= 1 << 0; // set the 7th bit (least significant bit)
some_char |= 1 << 1; // set the 6th bit
some_char |= 1 << 2; // set the 5th bit
// etc.

Мы можем написать простую функцию:

void set_bit(char& ch, unsigned int pos)
{
    ch |= 1 << pos;
}

Мы также можем проверить биты с помощью оператора &.

// If the 5th bit is set...
if (some_char & 1 << 2)
    ...

Вы также должны рассмотреть std :: bitset для этой цели, которая облегчит вашу жизнь.

0 голосов
/ 29 июня 2010

Просто используйте std :: bitset <40>, а затем напрямую индексируйте биты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...