C ++位移位

时间:2010-05-12 15:18:44

标签: c++ bytearray bit-shift

我刚开始使用bit& C ++中的字节,我正在看一些以前开发的代码,我需要一些帮助来理解代码的作用。有一个字节数组,并用一些数据填充它,我注意到数据是'&'使用0x0F(请参阅下面的代码)。我真的不明白那里发生了什么......如果有人可以解释一下,那将会有很大的影响。谢谢!

//Message Definition
/*
Byte 1: Bit(s) 3:0 = Unused; set to zero
Bit(s) 7:4 = Message ID; set to 10
*/

/*
Byte 2: Bit(s) 3:0 = Unused; set to zero
Bit(s) 7:4 = Acknowledge Message ID; set to 11
*/    

    //Implementation

    BYTE Msg_Arry[2];
    int Msg_Id = 10;
    int AckMsg_Id = 11;


    Msg_Arry[0] = Msg_Id  & 0x0F;       //MsgID & Unused
    Msg_Arry[1] = AckMsg_Id & 0x0F;     //AckMsgID & Unused

3 个答案:

答案 0 :(得分:2)

0x0f是二进制的00001111。当你使用它执行按位和(&)时,它具有掩盖char的前四位的效果(因为0 & anything总是0)。

答案 1 :(得分:1)

x & 0xF

返回数据的低四位。

如果你想到x的二进制表示,并使用和运算符0x0f(二进制的00001111),x的前四位将始终为零,而后四位将成为操作前的位

答案 2 :(得分:0)

在给定的例子中,它实际上什么也没做。 Msg_IdAckMsg_Id都小于0x0F,因此屏蔽它们对此没有影响。

然而,在整数类型上使用按位运算符(&)会在给定的操作数之间执行bit for bit AND