C位操作相关位



很抱歉,如果这是重复的,我找不到我想要的。

我有一个字节的当前值:

00110001 A

我必须写另一个值:

10001001 B

但在第二个字节中只有一些位是相关的。相关位是这个位中有一个的吗

11000000 C

最后一个字节将是C==1的位上的B,以及C==0的位上将是A。如果没有if语句,我怎么能做到这一点?

答案是D 10110001

掩码和组合:

finalByte = (B & C) | (A & ~C);

为了分解它的工作原理,B & C的结果是一个包含B的所有位的字节,其中设置了C的位(正常的屏蔽操作)。A & ~C产生具有A的所有位的字节,其中C的位被清除,因此~补码操作。|将这两者组合到您要查找的最后一个字节中。

(B & C) | (A & ~C)

第一表达式仅保留CCD_ 9中设置了CCD_;第二个仅保留CCD_ 11的位,其中CCD_;逻辑或将这两个位集组合,得到您想要的结果。

最新更新