基于不同的掩码应用位掩码

时间:2017-10-31 15:03:29

标签: c++ bit-manipulation bitmask

这里有点难题。

我有一个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 ++中实现此目的的最佳(最简洁,可读和有效)方法是什么?

1 个答案:

答案 0 :(得分:6)

  1. 二进制C,可读版本:

     if (C) {
         D = A | B; 
     } else {
         D = A & ~B;   
     }
    
  2. 任意C

    首先,我们需要在A1

    中将1的{​​{1}}位设置为B
    C

    然后我们需要将这些位设置为D = A | (B & C) ,其等于0中的1且等于B中的0

    C

    或者简单地说

    D = D & ~(B & ~C)