if und xor - unlogisches Verhalten

@Raisch: Du hast natürlich Recht, denn es heißt exclusive or – da haben wohl die Finger etwas anderes getippt als der Kopf dachte. Ansonsten stimmt deine Aussage mit der ungeraden Anzahl an gültigen Bedingungen natürlich auch, denn dass sagt das Gleiche aus wie meins.

@Lime: Was soll bitte eine Und-Oder-Funktion machen? Wahr sein, wenn beide Bedingungen wahr sind oder nur eine? Das wäre dann das Gleiche, was die Oder-Funktion bereits erledigt.

Ansonsten:
Code:
 a b | a or b | a and b | a xor b | a nor b | a nand b | a xnor b
-----+--------+---------+---------+---------+----------+----------
 0 0 |      0 |       0 |       0 |       1 |        1 |        1
 0 1 |      1 |       0 |       1 |       0 |        1 |        0
 1 0 |      1 |       0 |       1 |       0 |        1 |        0
 1 1 |      1 |       1 |       0 |       0 |        0 |        1
 
Ja, aber wie du selber sagst:
Die Funktion heißt: oder bzw. or
Demnach bedeutet das für mein Verständnis: entweder $a = 3 oder $a = 5, aber nicht beides.
Ich weiß, das ist ein schlechtes Beispiel. Dafür ein einfaches.
Für mich hat bisher AND bedeutet, alles muss true sein und OR dass nur eines true sein darf. XOR kannte ich nicht.

Aber jetzt ist mir alles klar. :) Danke
 
Naja, ich kann schlecht wie Leute denken, von denen ich nichts weiß. Das ist so, als wenn man sagt "du hättest das Verbrechen verhindern können, wenn du dran gedacht hättest, dass ein Verrückter dies und jenes tun könnte..."

Aber ich glaube wir schweifen zu sehr ab. Thema ist für mich erledigt...
 
Ja, aber wie du selber sagst:
Die Funktion heißt: oder bzw. or
Demnach bedeutet das für mein Verständnis: entweder $a = 3 oder $a = 5, aber nicht beides.
Ich weiß, das ist ein schlechtes Beispiel. Dafür ein einfaches.
Für mich hat bisher AND bedeutet, alles muss true sein und OR dass nur eines true sein darf. XOR kannte ich nicht.

Aber jetzt ist mir alles klar. :) Danke
Diese Gatter kommen aus der Mathematik bzw. Elektrotechnik, die Funktionsweise wurde 'nur' auf die Informatik übertragen/angewendet.

Teste mal:
PHP:
if ( true or true )
{
    echo 'true or true => geht!<br />'
}
else
{
    echo 'true or true => geht nicht!<br />'
}

if ( true xor true )
{
    echo 'true xor true => geht!<br />'
}
else
{
    echo 'true xor true => geht nicht!<br />'
}

Gruß
 
Eigentlich kommen nur die NAND-, NOR- und NOT-Gatter aus der Elektrotechnik, da diese mit CMOS leicht erstellt werden können. Alle anderen Operationen kann man aus diesen drei Gattern erstellen:
Code:
AND(a, b) = NOT(NAND(a, b))
OR(a, b)  = NOT(NOR(a, b))
...
 
Eigentlich kommen nur die NAND-, NOR- und NOT-Gatter aus der Elektrotechnik, da diese mit CMOS leicht erstellt werden können. Alle anderen Operationen kann man aus diesen drei Gattern erstellen:
Code:
AND(a, b) = NOT(NAND(a, b))
OR(a, b)  = NOT(NOR(a, b))
...
Wenn Du es genau nehmen willst, dann reicht auch nur das NAND Gatter, damit kann man ALLE anderen Gatter abbilden.

Ich habe alle Gatter in der Elektrotechnik kennen gelernt, also kommen für mich alle Gatter daher. :P :D

Grüße
 
Naja, aber vom Verbrauch der Bauteile her ist die Idee, dass man alles auf NAND zurückführt, eher verschwenderisch, da man für ein NOT-Gatter nur zwei Feldeffekttransistoren braucht, für ein NAND- und NOR-Gatter hingegen je vier. Somit würde die Variante nur mit NANDs für ein NOT mit vier FETs zu Buche schlagen – nicht sehr sinnvoll.
Code:
OR(a,b) = NAND(NAND(a,a),NAND(b,b))   (12 Bauteile)
OR(a,b) = NAND(NOT(a),NOT(b))          (8 Bauteile)
AND(a,b) = NAND(NAND(a,b),NAND(a,b))  (12 Bauteile)
AND(a,b) = NOT(NAND(a,b))              (6 Bauteile)
 
Zuletzt bearbeitet:
Naja, aber vom Verbrauch der Bauteile her ist die Idee, dass man alles auf NAND zurückführt, eher verschwenderisch, da man für ein NOT-Gatter nur zwei Feldeffekttransistoren braucht, für ein NAND- und NOR-Gatter hingegen je vier. Somit würde die Variante nur mit NANDs für ein NOT mit vier FETs zu Buche schlagen – nicht sehr sinnvoll.
Code:
OR(a,b) = NAND(NAND(a,a),NAND(b,b)) (12 Bauteile)
OR(a,b) = NAND(NOT(a),NOT(b)) (8 Bauteile)
Aber in der Praxis (Digitaltechnik) schaut es so aus, dass viel mit 'NAND only' gearbeitet wird.

Gruß
 
Zuletzt bearbeitet:
Hallo Leute,

ich habe ein (für mich) unlogisches Verhalten einer if-Abfrage.
Ich prüfe in einer if-Abfrage ob eine der Bedingungen wahr ist.
Die Abfrage sieht so aus:
PHP:
if($_POST['action'] != 'new' XOR $_POST['action'] != 'change' XOR $_GET['action'] != 'delete') {
	echo "Ungültige Parameterübergabe - das Script wurde aus Sicherheitsgründen angehalten.";
	exit;
}
Das funktioniert einwandfrei!

Jetzt möchte ich das ganze um eine weitere Prüfung erweitern.
Das ganze sieht dann so aus:
PHP:
if($_POST['action'] != 'new' XOR $_POST['action'] != 'change' XOR $_GET['action'] != 'delete' XOR $_GET['action'] != 'deletepicture') {
	echo "Ungültige Parameterübergabe - das Script wurde aus Sicherheitsgründen angehalten.";
	exit;
}
Das funktioniert jetzt nicht mehr!
Egal was ich übergebe meine if Abfrage ist immer wahr und somit wird der echo-Text ausgegeben.

Entweder hab ich Tomaten auf den Augen oder ich bin etwas doof geworden in letzer Zeit.
Kann jemand Helfen?
Vielen Dank im Voraus!
Ich persönlich löse solche Abfragen mit einem Array
PHP:
function sanitize($s){
// @todo überprüfe den wert
return $s;
}

if(!in_array(sanitize($_GET['action']), array('new', 'change', 'delete', 'deletepicture')) {
   echo ....;
  exit;
}
 
Zuletzt bearbeitet:
Zurück