2

我是使用 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
4

3 回答 3

2

0x0f00001111二进制的。当您对此执行按位与 ( &) 时,它具有屏蔽 char 的前四位的效果(因为0 & anything总是0)。

于 2010-05-12T15:21:09.397 回答
1
x & 0xF

返回数据的低四位。

如果您考虑 x 的二进制表示,并使用与 0x0f(二进制中的 00001111)操作符,x 的前四位将始终为零,而后四位将变为运算前的状态。

于 2010-05-12T15:20:56.377 回答
0

在给定的示例中,它实际上什么都不做。Msg_Id并且AckMsg_Id都小于0x0F,因此在此处屏蔽它们无效。

但是,&对整数类型使用按位与运算符 ( ) 在给定的操作数之间执行逐位与运算。

于 2010-05-12T15:23:52.580 回答