以下代码中的逻辑运算符和位运算符之间是否存在任何功能差异?使用这一个或另一个的原因是什么?
typedef unsigned char BOOLEAN;
void orOperatorsComparison(BOOLEAN bBar, BOOLEAN bFoo)
{
BOOLEAN bLogicalOr = (bFoo || bBar);
BOOLEAN bBitwiseOr = (bFoo | bBar);
...
}
Run Code Online (Sandbox Code Playgroud)
"支持"是什么意思?
如果它是合乎逻辑的或者你的意思,那么当然你应该总是使用,||因为那是布尔,逻辑,"或"运算符.
它具有能够短路的优点,但这在代码中并不重要,这很简单.
我认为它是奇怪的和奇怪的(并且由于纠正)如果按位或当点不操作位时使用.
其他答案已经讨论过短路(但这不是您特定代码中的问题).但这是一个关键的区别.
如果由于某种原因,您的输入值不在[0,1]中,那么按位OR将给出一个也可能不在[0,1]中的答案.逻辑OR 保证给你0或1.
因此,您应该更喜欢逻辑OR.您的意图(可能)是操纵逻辑值,因此使用非逻辑运算符是不合逻辑的.*