C按位运算相关位

Kat*_*atu 1 c bit-manipulation

对不起,如果这是重复,我找不到我想要的.

我有一个字节的当前值:

00110001 A

我必须写另一个值:

10001001 B.

但在第二个字节中只有一些位是相关的.相关位是该位中的一位

11000000 C

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

答案是D 10110001

Car*_*rum 7

面具和组合:

finalByte = (B & C) | (A & ~C);
Run Code Online (Sandbox Code Playgroud)

为了分解它B & C是如何工作的 - 结果是一个包含所有位的B位的字节C(正常的屏蔽操作). A & ~C产生一个字节,其中所有AC都被清除 - 因此~补码操作.在|两成你正在寻找的最后一个字节联合收割机.


Mik*_*our 5

(B & C) | (A & ~C)
Run Code Online (Sandbox Code Playgroud)

第一个表达式只保留Bwhere C的设置位; 第二保持的唯一的位A,其中C设置; 和逻辑或组合这两个位集来给出你想要的结果.