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

rsk*_*k82 5 c++ bit-manipulation

例:

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

 |0 1
-|----
0|0 1
1|0 0
Run Code Online (Sandbox Code Playgroud)

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

Lie*_*yan 7

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

鉴于:

 a     = 1010111110110001
 b     = 0101011100010010
Run Code Online (Sandbox Code Playgroud)

然后否定b给出:

~b     = 1010100011101101
Run Code Online (Sandbox Code Playgroud)

并做a & ~b:

 a     = 1010111110110001
~b     = 1010100011101101
-------------------------
a & ~b = 1010100010100001
Run Code Online (Sandbox Code Playgroud)


ted*_*ted 6

简单:

result = op1 & ~op2;
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*ins 6

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

result = val1 & ~val2;
Run Code Online (Sandbox Code Playgroud)