这里有点难题。
我有一个4位序列,名为 A 。必须根据2个面具进行修改: B 和 C 。 B 是一个掩码,告诉我们要修改哪些 A , C 告诉我们要应用于 A <的值/ strong>即可。在我的情况下, C 总是1111或0000,但我也会对一般答案感兴趣。
例如,让我们从:
开始A = 0000
B = 0001
C = 1111
// Then the result should be:
D = 0001
一个不太重要的例子:
A = 0001
B = 1010
C = 1111
// Then the result should be:
D = 1011
展示不同的 C :
A = 1011
B = 0010
C = 0000
// Then the result should be:
D = 1001
使用按位运算在C ++中实现此目的的最佳(最简洁,可读和有效)方法是什么?
答案 0 :(得分:6)
二进制C
,可读版本:
if (C) {
D = A | B;
} else {
D = A & ~B;
}
任意C
:
首先,我们需要在A
和1
1
的{{1}}位设置为B
C
然后我们需要将这些位设置为D = A | (B & C)
,其等于0
中的1
且等于B
中的0
C
或者简单地说
D = D & ~(B & ~C)