在C ++中设置单个位

时间:2010-06-28 21:26:30

标签: c++ bit-manipulation

我有一个5字节的数据元素,我需要一些帮助来弄清楚如何在C ++中设置这些字节之一的单个位;请参阅下面的示例代码:

char m_TxBuf[4]; 

我想将第2位设置为字节m_TxBuf[1]的高位。

    
00000 0 00
      ^ This one

非常感谢任何支持; 谢谢!

6 个答案:

答案 0 :(得分:14)

Bitwise operators in C++

  

“......设置第2位......”

Bit endianness

  

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

m_TxBuf[1] |= 1 << 2

答案 1 :(得分:4)

您可以使用按位或(|)来设置各个位,使用按位和(&)来清除它们。

答案 2 :(得分:3)

m_TxBuf[1] |= 4;

要设置位,可以使用按位或。以上使用复合赋值,这意味着左侧是输入和输出之一。

答案 3 :(得分:3)

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

答案 4 :(得分:1)

通常我们使用按位运算符OR(运算符|或运算符| =作为简写)来设置位。

为简单起见,假设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;
}

我们同样可以使用operator&amp;。

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

你也应该考虑使用std :: bitset来使你的生活更轻松。

答案 5 :(得分:0)

只需使用std :: bitset&lt; 40&gt;然后直接索引位。