Obwohl es bereits gute Antworten gibt, dachte ich, dass dieser Ansatz für jemanden, der neu in der Booleschen Algebra ist, noch intuitiver sein könnte, als eine Wahrheitstabelle auszuwerten.
Als erstes möchten Sie prüfen, unter welchen Bedingungen Sie C ausführen möchten. Dies ist der Fall, wenn (a & b)
. Auch wenn !a
. Also hast du (a & b) | !a
.
Wenn Sie minimieren möchten, können Sie fortfahren. Genau wie bei "normalen" Arithmetiken können Sie multiplizieren.
(a & b) | !a = (a | !a) & (b | !a)
. a | ! a ist immer wahr, Sie können es also einfach streichen, wodurch Sie das minimierte Ergebnis erhalten : b | !a
. Falls die Reihenfolge einen Unterschied macht, weil Sie b nur prüfen möchten, wenn! A wahr ist (zum Beispiel, wenn! A eine Nullzeigerprüfung ist und b eine Operation auf dem Zeiger ist, wie in seinem Kommentar auf @LordFarquaad hingewiesen), könnten Sie dies tun will die beiden wechseln.
Der andere Fall (/ * ... * /) wird immer ausgeführt, wenn c nicht ausgeführt wird, also können wir ihn einfach in den else-Fall setzen.
Erwähnenswert ist auch, dass es wahrscheinlich in beiden Fällen sinnvoll ist, Aktion c in eine Methode einzufügen.
Was uns den folgenden Code lässt:
if (!A || B)
{
doActionC() // execute method which does action C
}
else
{
/* ... */ // what ever happens here, you might want to put it into a method, too.
}
Auf diese Weise können Sie auch Begriffe mit mehr Operanden minimieren, was bei Wahrheitstabellen schnell hässlich wird. Ein weiterer guter Ansatz sind Karnaugh-Karten. Aber ich werde jetzt nicht tiefer darauf eingehen.