Set individual bit in C++

烂漫一生 提交于 2019-12-01 06:32:27

Bitwise operators in C++.

"...set bit 2..."

Bit endianness.

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

m_TxBuf[1] |= 1 << 2

You can use bitwise-or (|) to set individual bits, and bitwise-and (&) to clear them.

int bitPos = 2;  // bit position to set
m_TxBuf[1] |= (1 << bitPos);
m_TxBuf[1] |= 4;

To set a bit, you use bitwise or. The above uses compound assignment, which means the left side is one of the inputs and the output.

Typically we set bits using bitwise operator OR (operator| or operator|= as a shorthand).

Assuming 8-bits to a byte (where the MSB is considered the '7st' bit and the LSB considered the 0th: MSB 0) for simplicity:

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.

We can write a simple function:

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

We can likewise test bits using operator&.

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

You should also consider std::bitset for this purpose which will make your life easier.

Just use std::bitset<40> and then index bits directly.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!