如何实施 |和 & (bitor,bitand) 使用 +-*/%?

How can one implement | and & (bitor,bitand) using +-*/%?

如何仅使用基本算术实现 bitOR 和 bitAND 运算(在两个可变大小的 int 上,但至少小到 8 位)?我不关心执行速度,最重要的是代码的简单性和大小。我已经设法实现了否定、异或和移位。

如果你已经有了xor,那我建议如下:

bitAnd(a,b) = ((a+b) - bitXor(a,b)) / 2

其中 / 2 是(截断的)除以 2 的整数商(或向右移 1 位)。

注意,整数必须足够宽才不会溢出!
如果我们在 (a+b) 操作中丢失最高位,则该操作将不起作用。

然后您可以使用以下之一重建 bitOr:

bitOr(a,b) = bitXor(a,b) + bitAnd(a,b)
bitOr(a,b) = (a+b) - bitAnd(a,b)