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)
@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 ^ Y和X ^ ~Y。如果XorY是常数或在不变化的情况下重复使用(如在循环中),则可以提前计算~Xor ,只留下 XOR 进行计算。~Y(这是一个小的优化,现代编译器可能会自动进行。)
| 归档时间: |
|
| 查看次数: |
247 次 |
| 最近记录: |