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バイナリです。これで bitwise-and ( ) を実行する&と、char の上位 4 ビットをマスクする効果があります ( 0 & anythingis alwaysであるため0)。

于 2010-05-12T15:21:09.397 に答える
1
x & 0xF

データの下位 4 ビットを返します。

x の 2 進数表現を考えて、and 演算子を 0x0f (2 進数で 00001111) と共に使用すると、x の上位 4 ビットは常にゼロになり、下位 4 ビットは演算前の値になります。

于 2010-05-12T15:20:56.377 に答える
0

与えられた例では、実際には何もしません。Msg_IdAckMsg_Idはどちらも より小さいので0x0F、それらをマスクしてもここでは効果がありません。

ただし、&整数型でビットごとの AND 演算子 ( ) を使用すると、指定されたオペランド間でビット AND のビットが実行されます。

于 2010-05-12T15:23:52.580 に答える