[英]How to implement logical operators using bitwise operators
逻辑运算符如何||
和&&
仅使用按位运算符&
、 ^
、 |
来实现 , ~
, >>
, <<
逻辑运算符!
, 和+
? 我在堆栈溢出和谷歌上四处寻找某人以前的答案或一些汇编实现,但还没有找到任何东西。 我想如果没有人有任何解决方案,我可能会转向 HDL 并看看它合成了什么。
不可能,尽管建议a && b
可以写成!!a & !!b
和a || b
是很有诱惑力的。 a || b
作为!!a | !!b
!!a | !!b
。
这是因为||
和&&
有一个属性,如果从第一个参数的结果中知道表达式的结果,则不会发生对第二个参数的评估。 例如为true || A
true || A
, A
未评估,对于false && B
, B
未评估。 因此,如果您尝试复制||
或&&
与位运算符,那么你可以很好地在你的程序中引入副作用。
还有||
和&&
是排序点,而按位运算符不是。 因此,例如定义了a++ && a++
,但未定义a++ & a++
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.