繁体   English   中英

可以使用按位运算符代替逻辑运算符(例如OR)吗

[英]Is it ok to use bitwise operator in place of a logical operator like OR

这可能是愚蠢的。但是我有一个简单的疑问,假设我在函数中进行了以下检查

bool Validate(string a , string b)
{
    if(a == null || b == null)
    {
        throw new NullReferenceException();
    }
    else
    {
    }
}

可以使用按位或进行验证,如下所示

if(a == null | b == null)

在布尔表达式(而不是整数等)中,主要区别是:短路。 || 短路。 | 才不是。 在大多数情况下,您短路,所以|| 更为常见。 对于您而言,这无关紧要,所以|| 应该被用作更期望的选择。

重要的时刻是:

if(politics.IsCeasefire() | army.LaunchTheRockets()) {
    // ...
}

vs:

if(politics.IsCeasefire() || army.LaunchTheRockets()) {
    // ...
}

第一个总是做这两个 (假设没有抛出异常); 如果要求停火,第二个也不会发射火箭。

在这种情况下(与bool参数)的| 运算符不是按位运算符。 它只是逻辑or|| )的非短路版本。

& vs. && -这只是逻辑and的非短路版本。

可以从副作用中看出差异,例如

bool Check()
{
    Console.WriteLine("Evaluated!");
    return true;
}

// Short-circuits, only evaluates the left argument.
if (Check() || Check()) { ... }

// vs.

// No short circuit, evaluates both.
if (Check() | Check()) { ... }

这应该行得通,因为当在评估为bool事物上使用时,“按位”运算符将执行相同的逻辑运算。 但是,您可能会发现它效率较低。 C#中的逻辑运算符将短路,这意味着如果可以从第一个表达式中得出答案,则它们将跳过对第二个表达式的求值。 因此,在您的示例中,如果a == null变为true,则|| 将立即返回true ,而| 会继续检查b == null

如前所述,该代码确实是“确定”的。

使用单管道“ |” 将在返回结果之前对所有表达式求值。 '||' 可以提高效率,因为表达式一经计算为true就立即终止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM