像&&這樣的操作符 被稱為短路運算符,因為它們只有當第一個條件為True時才會執行第2個條件。我們重復了和先前一樣的 IL代碼,但是現在條件是使用blt.s指令進行檢查的,它是clt和brtrue指令的組合。
如果條件為 FALSE,就會跳轉到標號IL_0016處的ret指令。只有當條件為TRUE時,我們就可以向下進行並檢查第2個條 件。為此,我們使用ble.s指令,它是cgt和brfalse的組合。如果第2個條件為FALSE,我們就像前面一樣 跳轉到ret指令,如果為TRUE,我們就執行WriteLine函數。
&&操作符執行比&快,因 為它只能當第一個條件為TRUE時才會進行到下一步。這樣做,第一個表達式的輸出就會影響到最後的輸出 。
|和||操作符也以類似的方式來表現。
a.cs
class zzz
{
public static void Main()
{
bool x,y;
x = true;
y = false;
System.Console.WriteLine( x ^ y);
x = false;
System.Console.WriteLine( x ^ y);
}
}
a.il
.assembly mukhi {}
.class private auto ansi zzz extends [mscorlib]System.Object
{
.method public hidebysig static void vijay() il managed
{
.entrypoint
.locals (bool V_0,bool V_1)
ldc.i4.1
stloc.0
ldc.i4.0
stloc.1
ldloc.0
ldloc.1
xor
call void [mscorlib]System.Console::WriteLine(bool)
ldc.i4.0
stloc.0
ldloc.0
ldloc.1
xor
call void [mscorlib]System.Console::WriteLine(bool)
ret
}
}
Output
True
False