基于另一个掩码应用位掩码

3

这里有一个小难题。

我有一个称为A的四位比特序列。它必须根据两个掩码BC进行修改。 B是一个指示我们应该修改哪些A比特的掩码,C告诉我们要应用在A上的值。在我的情况下,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个回答

6
  1. Binary C, readable version:

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

    First, we need to set those bits of A to 1 that equal to 1 in both B and C

    D = A | (B & C)
    

    Then we need to set those bits to 0 that equal to 1 in B and equal to 0 in C

    D = D & ~(B & ~C)
    

    or a bit simply

    D = D & (~B | C) 
    

基于C将始终为0000或1111,这似乎很好。但是如果不是呢?假设A=1011,B=0110,C=1100,则结果应为D=1101。 - Alex Millette
3
那么这是一个不同的问题,需要不同的解决方案 :-) - Germán
@AlexMillette - 这不是你原来的问题所描述的问题。 - Sean
你说得对,我的问题确实解决了。不过我认为这可能会帮助到寻找更通用答案的人。 - Alex Millette

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接