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

how to zero every bit when in second operand is 1?

本文关键字:归零 操作数 第二个 1时      更新时间:2023-10-16

示例:

1010111110110001
0101011100010010
================
1010100010100001
 |0 1
-|----
0|0 1
1|0 0

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

您可以按位执行NOT,然后与它们进行and运算:a & ~b

给定:

 a     = 1010111110110001
 b     = 0101011100010010

则否定b得到:

~b     = 1010100011101101

并进行a & ~b:

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

simple:

result = op1 & ~op2;

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

您应该能够对逐位否定进行逐位AND:

result = val1 & ~val2;

您需要对第二个操作数的余数进行逐位AND运算。

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