是否存在返回 1 位相等的按位运算?

aff*_*ner 0 c bitwise-operators

我正在尝试编写一个简单的 C 按位​​运算,如果位相等则返回 YES。真值表如下:

在此输入图像描述

我尝试了 AND、XOR 和 OR 的各种组合,但没有成功。当然,我可以扫描每个位对并使用“IF”语句提出问题,但做得更优雅。

这是我需要的一个例子:

x = 251 - 11111011
y = 18  - 00010010
r = 22  - 00010110
Run Code Online (Sandbox Code Playgroud)

pma*_*ane 7

@daniel、@Barmar 和 @pignotto 已在评论中给出了答案,但为了让您清楚。为 XOR 运算符制作一个真值表(在 C 中为X ^ Y):

X
0 0 0
0 1 1
1 0 1
1 1 0

这与您想要的相反 - 即 R 是0您想要的,1反之亦然。

所以你要R = ~(X ^ Y)

运算~符将所有位取反,0变成1和。10

等效表达式是~X ^ YX ^ ~Y。如果XorY是常数或在不变化的情况下重复使用(如在循环中),则可以提前计算~Xor ,只留下 XOR 进行计算。~Y(这是一个小的优化,现代编译器可能会自动进行。)