C按位运算相关位

时间:2013-07-16 14:24:57

标签: c bit-manipulation

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

我有一个字节的当前值:

  

00110001 A

我必须写另一个值:

  

10001001 B

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

  

11000000 C

最后一个字节在C == 1的位上为B,在C == 0的位上为A. 如果没有if语句我怎么能这样做?

答案是D 10110001

2 个答案:

答案 0 :(得分:7)

掩饰和组合:

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

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

答案 1 :(得分:5)

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

第一个表达式仅保留设置B的{​​{1}}位;第二个只保留C的位A 设置;和逻辑或组合这两个位集来给出你想要的结果。