Même s'il y a déjà de bonnes réponses, j'ai pensé que cette approche pourrait être encore plus intuitive pour quelqu'un qui est nouveau dans l'algèbre booléenne que pour évaluer une table de vérité.
La première chose que vous voulez faire est de regarder, dans quelles conditions vous voulez exécuter C. C'est le cas quand (a & b)
. Aussi quand !a
. Donc vous avez (a & b) | !a
.
Si vous voulez minimiser, vous pouvez continuer. Tout comme dans l'arithmétique "normale", vous pouvez multiplier.
(a & b) | !a = (a | !a) & (b | !a)
. a | ! a est toujours vrai, de sorte que vous pouvez simplement biffer, qui vous laisse avec le résultat réduit: b | !a
. Dans le cas où l'ordre fait une différence, parce que vous voulez vérifier b uniquement si! A est vrai (par exemple quand! A est une vérification de pointeur nul et b est une opération sur le pointeur comme @LordFarquaad l'a souligné dans son commentaire), vous pourriez voulez changer les deux.
L'autre cas (/ * ... * /) est sera toujours exécuté lorsque c n'est pas exécuté, donc nous pouvons simplement le mettre dans le cas else.
Il convient également de mentionner qu'il est probablement logique de mettre l'action c dans une méthode.
Ce qui nous laisse avec le code suivant:
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.
}
De cette façon, vous pouvez également minimiser les termes avec plus d'opérandes, ce qui devient rapidement laid avec les tables de vérité. Les cartes de Karnaugh sont une autre bonne approche. Mais je ne vais pas approfondir cela maintenant.