Kat*_*atu 1 c bit-manipulation
对不起,如果这是重复,我找不到我想要的.
我有一个字节的当前值:
00110001 A
我必须写另一个值:
10001001 B.
但在第二个字节中只有一些位是相关的.相关位是该位中的一位
11000000 C
最后一个字节在C == 1的位上是B,在C == 0的位上是A. 如果没有if语句我怎么能这样做?
答案是D 10110001
面具和组合:
finalByte = (B & C) | (A & ~C);
Run Code Online (Sandbox Code Playgroud)
为了分解它B & C
是如何工作的 - 结果是一个包含所有位的B
位的字节C
(正常的屏蔽操作). A & ~C
产生一个字节,其中所有A
位C
都被清除 - 因此~
补码操作.在|
两成你正在寻找的最后一个字节联合收割机.
(B & C) | (A & ~C)
Run Code Online (Sandbox Code Playgroud)
第一个表达式只保留B
where C
的设置位; 第二保持的唯一的位A
,其中C
被不设置; 和逻辑或组合这两个位集来给出你想要的结果.