如何使用位运算符实现逻辑运算符

How to implement logical operators using bitwise operators

如何仅使用位运算符&^|、[=15=来实现逻辑运算符||&& ], >>, << 逻辑运算符 !, 和 +?我在堆栈溢出和 google 上四处寻找某人以前的答案或一些程序集实现,但还没有找到任何东西。我想如果没有人有任何解决方案,我可能会求助于 HDL,看看它合成了什么。

他们不可能,尽管建议 a && b 可以写成 !!a & !!b 并且 a || b 可以写成 !!a | !!b.

这是因为 ||&& 有一个 属性 如果表达式的结果从第一个的结果已知,则第二个参数的计算不会发生争论。例如。对于 true || AA 不计算,对于 false && BB 不计算。因此,如果您尝试使用按位运算符复制 ||&&,那么您很可能会在程序中引入副作用。

另外 ||&& 序列点 ,而按位运算符不是。例如,a++ && a++ 已定义,但 a++ & a++ 未定义。