-7

Which if statement is faster, with the following conditions. It seems the short-circuit will compile into more instructions then the non-short-circuit.

bool force = false;
bool _isLoadingActual = true;
bool _isLoadingLoadCore = true;

int a = 0, b = 0;

if (force | !(_isLoadingActual | _isLoadingLoadCore))
{
    a = 1;
}

if (force || !(_isLoadingActual || _isLoadingLoadCore))
{
    b = 1;
}
4

3 に答える 3

3

これが最速の解決策です

a = 0;
b = 0;

ブール変数の値はすでにわかっているためです。

真剣に.. 2番目のものは、短絡する可能性があるため、おそらく高速です。つまり、最初のブール値をfalseにハードコーディングしていない場合です! そうでなければ、短絡はより速くなければならないようです。

于 2013-02-21T03:00:45.053 に答える
0

|あなたの質問が「または||短絡のどちらか」であると仮定すると:

  • ||短絡します- || 演算子(C#リファレンス)

    最初のオペランドがfalseと評価された場合、2番目の演算子はOR式全体がtrueと評価されるかfalseと評価されるかを決定します。

  • |短絡しません- | 演算子(C#リファレンス)

    ブールオペランドの場合、| オペランドの論理ORを計算します。つまり、両方のオペランドがfalseの場合にのみ、結果はfalseになります。

したがって、純粋な理論的な意味では、コードの||方が高速であり、実際のコードの違いによる影響を測定できない可能性があります。

オペランドの計算に副作用がある場合、2つのステートメントは同等ではないことに注意してください(すでにブール変数があるため、2つのステートメントは同等ではありません)。

于 2013-02-21T03:09:19.313 に答える
0

2番目のコードの方が速いと思います。

if (force || !(_isLoadingActual || _isLoadingLoadCore))
{
    b = 1;
}

短絡評価だから。

上記のコードでは、forceが true の場合、残りの条件 ( !(_isLoadingActual || _isLoadingLoadCore)) をチェックする必要はありません。

于 2013-02-21T02:59:00.553 に答える