在C+中设置单个位+; 我有一个5字节的数据元素,我需要一些帮助来理解C++中如何设置这些字节中的一个字节;请参见下面的示例代码: char m_TxBuf[4];

在C+中设置单个位+; 我有一个5字节的数据元素,我需要一些帮助来理解C++中如何设置这些字节中的一个字节;请参见下面的示例代码: char m_TxBuf[4];,c++,bit-manipulation,C++,Bit Manipulation,我想将第2位设置为字节m_TxBuf[1]的高位 00000 0 00 ^ This one 00000 0 00 ^这个 非常感谢您的支持; 谢谢 “…设置位2…” 我想将第2位设置为字节m_TxBuf[1]的高位 m_TxBuf[1]|=1您可以使用按位或()设置单个位,并使用按位和(&)清除它们 m_TxBuf[1] |= 4; 要设置位,请使用按位或。上面使用复合赋值,这意味着左侧是输入和输出之一。int-bitPos=2;//要设置的位位置 int bitPos =

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

00000 0 00 ^ This one 00000 0 00 ^这个 非常感谢您的支持; 谢谢

“…设置位2…”

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

m_TxBuf[1]|=1您可以使用按位或(
)设置单个位,并使用按位和(
&
)清除它们

m_TxBuf[1] |= 4;
要设置位,请使用按位或。上面使用复合赋值,这意味着左侧是输入和输出之一。

int-bitPos=2;//要设置的位位置
int bitPos = 2;  // bit position to set
m_TxBuf[1] |= (1 << bitPos);

m_TxBuf[1]|=(1通常我们使用按位运算符或(运算符|或运算符|=作为简写)设置位

为简单起见,假设字节为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.
charsome\u char=0;

有些字符|=1只需使用std::bitset,然后直接对位进行索引。

什么?00**模式是什么意思?其中有14位数字,但您说您有5个字节的数据(并且显示了一个4字节的数组)。将位2设置为“字节m\u TxBuf[1]的高位”是什么意思?我相信他只是突出显示了他想要设置高的位。正确,只是突出显示了要设置的位,抱歉有任何混淆和“字节高”的意思?为什么当你说你有5个字节的数据时,你会显示一个4字节数组?这不是“字节高”,而是“字节m_TxBuf[1]”的“字节2到高”。“高”是一个在低级数字电子学中使用的词,表示位/线/总线/等的“开”状态,在本上下文中表示“将其设置为1”,当您指的是第8位时,您是指值1还是128(128-000000-1)@JB_抱歉,我在帖子中澄清了令人困惑的部分。我从MSB(最高有效位)开始从左到右按我们通常在纸上表示位的方式将其转换为LSB。MSB是第一位,LSB是第八位。因此,设置第八位会将值增加1。我将其转换为MSB 0约定(范围从0到7),因为回想起来,“第八位”确实令人困惑。
void set_bit(char& ch, unsigned int pos)
{
    ch |= 1 << pos;
}
// If the 5th bit is set...
if (some_char & 1 << 2)
    ...