0

让我们这么说byte1 = 00001111,和byte2 = 11110000。我将如何取后半部分byte1,然后取前半部分byte2并将它们组合起来以获得一个字节的值11111111。我已经做了一些研究,但我似乎无法将我的头包裹在位掩码和移位上。

4

1 回答 1

1

如果保证“备用”位全为零,则可以OR将两个字节放在一起,因为A or 0 == A (见下文)

如果不能保证,则需要(byte1 AND 0x0f) OR (byte2 AND 0xf0).

操作将AND不需要的位设置为零(因为A AND 0 == 0),然后OR操作组合字节,如上所述。

    ABCDXXXX              XXXXEFGH
AND 11110000 (0xf0)   AND 00001111 (0x0f)
    --------              --------
  = ABCD0000            = 0000EFGH

接着

    ABCD0000
 OR 0000EFGH 
    --------
  = ABCDEFGH

不需要移位,因为您要保留的位已经在正确的位位置。

于 2016-02-04T17:17:17.197 回答