To nie jest takie proste. Język C# nie modeluje bramy NAND w ogóle za pomocą operatora & &. Ten operator ma zwarcie zachowanie, bardzo wygodne w programie C#.I powszechne zachowanie dla języków kręcone nawiasów, wyrażenie tak nie psuje swój kod:
arr[] = somefunction();
int ix = foo;
if (ix < arr.Length && arr[ix] == 42) {
EmailBookRecommendation();
}
Ale to bardzo nieefektywne wersja wypowiedzi, ten jest sposób bardziej wydajnych:
if (ix < arr.Length & arr [ix] == 42)
Co jest doskonałym wyrażeniem prawnym, operator & działa dobrze z operandami logicznymi. Ale niestety to powoduje awarię twojego kodu. Oblicza wyrażenie indeksujące tablicę i idzie Kaboom! z IndexOutOfRangeException.
To nigdy nie jest problem z bramką NAND, nie ulega awarii, gdy pierwszym wejściem jest F :) Istnieje wiele możliwych wyrażeń , w których to nie jest problem. Naprawdę powinieneś faworyzować operatora &. To powoduje, że różnica jest ogromna. Więc zawsze napisz coś takiego:
if (ix >= 1 & ix <= 42)
Co oczywiście nigdy nie zawiedzie. Aby zrozumieć, dlaczego operator & jest o wiele bardziej nieefektywny niż operator &, należy zrozumieć prognozę rozgałęzienia. Jest to bardzo dobrze opisane w this answer.
odwrócenie wyniku jest tożsame z zamianą kodu w 'else' z kodem w' if' ... nie jest wymagana aktualna instrukcja runtime –