Ale*_*tte 3 c++ bit-manipulation bitmask
这里有点难题.
我有4位,命名为顺序一个.它必须根据2个掩模进行修改:乙和Ç.B是一个掩码,告诉我们要修改哪个A位,C告诉我们要应用于A的值.在我的情况下,C总是1111或0000,但我也会对一般答案感兴趣.
例如,让我们从:
A = 0000
B = 0001
C = 1111
// Then the result should be:
D = 0001
Run Code Online (Sandbox Code Playgroud)
一个不那么简单的例子:
A = 0001
B = 1010
C = 1111
// Then the result should be:
D = 1011
Run Code Online (Sandbox Code Playgroud)
并展示一个不同的C:
A = 1011
B = 0010
C = 0000
// Then the result should be:
D = 1001
Run Code Online (Sandbox Code Playgroud)
使用按位运算在C++中实现此目的的最佳(最简洁,可读和有效)方法是什么?
二进制C,可读版本:
if (C) {
D = A | B;
} else {
D = A & ~B;
}
Run Code Online (Sandbox Code Playgroud)任意C:
首先,我们需要的那些位设置A到1这等于1在这两个B和C
D = A | (B & C)
Run Code Online (Sandbox Code Playgroud)
然后我们需要将那些位设置为0等于1in B和等于0inC
D = D & ~(B & ~C)
Run Code Online (Sandbox Code Playgroud)
或者有点简单
D = D & (~B | C)
Run Code Online (Sandbox Code Playgroud)