簡體   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