2016-03-21 4 views
0

Ich habe ein bisschen Mühe, meinen Kopf um die Verneinung mehrerer OR-Anweisungen zu bekommen.Auflösen der Negation mehrerer OR-Anweisungen in einem konditionalen

Im Falle von AND, sagen wir, ich habe folgendes:

$a = 'john'; 
$b = 'mark'; 
$c = 'luke'; 

if(!($a == 'john' && $b == 'mark' && $c == 'luke')) 
{ 
    echo "Not All Apostles"; 
} 

Es ist klar, dass es kein Echo/Ausgang, weil die alle übereinstimmen Bedingungen. Auch ist die Negation etwas leicht zu verstehen. Mit anderen Worten, wenn ich 1 für true und 0 für false verwendet habe, kann die Bedingung nur dann übereinstimmen, wenn sie nur in 111 aufgelöst wird, also ist die Bedingung bei der Negation wahr, wenn sie NICHT 111 ist, dh negation stimmt, wenn ich 101 habe. 100, 001 usw.

Also, was passiert, wenn ich die folgenden Voraussetzungen erfüllt sein:

if(!($a == 'john' || $b == 'david' || $c == 'luke')) 
{ 
    echo "???"; 
} 

Ohne die Negation, wird es auf true beheben, wenn [die numerische Schreibweise früher eingeführt mit] der Bedingung, außer irgendetwas löst 000 dh es muss mindestens eine Matte sein ch für die Bedingung, die aufgelöst werden soll, wenn die Negation nicht vorhanden ist.

Also was genau passiert mit der Negation vorhanden?

+0

Ich bin nicht sicher, ob ich Ihre Frage, aber Sie TRUE bekommen für etwas anderes als '000' mit der Negation. – Rizier123

+1

https://en.wikipedia.org/wiki/De_Morgan's_laws 'nicht (A || B) ~ nicht (A) && nicht (B)'. Auch nicht (A && B) ~ nicht (A) || nicht (B) ' – Axalix

+0

@ Rizier123 Ich dachte, es wäre WAHR für etwas anderes als' 000' OHNE die Negation, d. h. nur wenn es mindestens eine Übereinstimmung gibt, wird es ohne die Negation wahr sein ?! –

Antwort

0

Ich glaube, Sie mit bitweise vs boolean Vergleich verwirrt sind:

Sie verwenden boolean Vergleich && und || nicht die Bit-Operatoren & und |.

Jeder Vergleich in Sie bedingte auswertet zu true oder false:

So:

if(!($a == 'john' && $b == 'mark' && $c == 'luke')) 
{ 
    echo "Not All Apostles"; 
} 

Ist eigentlich:

if(!(true && true && true)) 
{ 
    echo "Not All Apostles"; 
} 

Welche if(false)

Ihr zweites Beispiel ist:

if(!(true || true || true)) 
{ 
    echo "???"; 
    } 

Wird

if(!($a == 'john' || $b == 'mark' || $c == 'luke')) 
{ 
    echo "???"; 
    } 

die auch

if(!(true)) 
+0

Danke für die Klarstellung. Bearbeitete die Frage, um eine der Bedingungen falsch zu machen. Also ich denke, das wäre "if (true || true || false)" was "if (true)" ist, und daher "if (! True)" mit Negation. Also heißt das mit OR-Bedingungen, Negation ist logisch UND-Bedingungen ohne Negation gleichwertig? –

+0

In der grundlegenden Booleschen Algebra ist dies die Äquivalenz zwischen AND und OR: 'A und B =! (!A oder! B) ', hat jemand dazu in Ihrem OP kommentiert – Ray

+0

Vielen Dank. Ich habe ein kleines Diagramm erstellt, um alles auszuarbeiten. Prost. –