当第二个操作数为1时,如何将每个位置零?

时间:2013-03-08 18:05:36

标签: c++ bit-manipulation

示例:

1010111110110001
0101011100010010
================
1010100010100001

 |0 1
-|----
0|0 1
1|0 0

如何在c ++ / c ++ 11中执行此操作?

4 个答案:

答案 0 :(得分:7)

你可以做一个按位NOT然后AND它们:a & ~b

假设:

 a     = 1010111110110001
 b     = 0101011100010010

然后否定b给出:

~b     = 1010100011101101

并且正在执行a & ~b

 a     = 1010111110110001
~b     = 1010100011101101
-------------------------
a & ~b = 1010100010100001

答案 1 :(得分:6)

简单:

result = op1 & ~op2;

这会按位反转第二个操作数(1变为0,反之亦然)。在此之后你使用按位和。这通常使用位掩码调用。

答案 2 :(得分:6)

您应该能够按位否定执行按位AND:

result = val1 & ~val2;

答案 3 :(得分:4)

你想要第二个操作数的补码的按位AND。

int fun(int x, int y)
{
    return x & ~y;
}