我刚开始使用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
答案 0 :(得分:2)
0x0f
是二进制的00001111
。当你使用它执行按位和(&
)时,它具有掩盖char的前四位的效果(因为0 & anything
总是0
)。
答案 1 :(得分:1)
x & 0xF
返回数据的低四位。
如果你想到x的二进制表示,并使用和运算符0x0f(二进制的00001111),x的前四位将始终为零,而后四位将成为操作前的位
答案 2 :(得分:0)
在给定的例子中,它实际上什么也没做。 Msg_Id
和AckMsg_Id
都小于0x0F
,因此屏蔽它们对此没有影响。
然而,在整数类型上使用按位运算符(&
)会在给定的操作数之间执行bit for bit AND。