Privacy Policy Cookie Policy Terms and Conditions Logischer Operator - Wikipedia

Logischer Operator

aus Wikipedia, der freien Enzyklopädie

In Programmiersprachen bezeichnet man als logische Operatoren solche Operatoren, die einen Wahrheitswert, wahr oder falsch, liefern. Ein Sprachausdruck einer Programmiersprache, dessen Wert ein Wahrheitswert ist, wird als Ganzes logischer Ausdruck genannt.

Die wichtigsten logischen Operatoren sind Vergleichsoperatoren und logische Verknüpfungen. Vergleichsoperatoren vergleichen zwei Werte, etwa numerische Größen, und liefern in Abhängigkeit vom Ausgang des Vergleichs (gleich, ungleich, größer, kleiner usw.) einen Wahrheitswert. Logische Verknüpfungen (Junktoren) verbinden andere (meist zwei) logische Ausdrücke zu einem komplexeren logischen Ausdruck. Je nach Art des Verknüpfungsoperators ist der zusammengesetzte Ausdruck zum Beispiel genau dann wahr, wenn beide verknüpften Ausdrücke wahr sind (Und-Verknüpfung) oder wenn mindestens einer der verknüpften Ausdrücke wahr ist (Oder-Verknüpfung). Von den Junktoren in der Aussagenlogik unterscheiden sich die logischen Operatoren der Programmiersprachen unter Umständen in der Auswertungsreihenfolge oder in mit zu berücksichtigenden Nebeneffekten.

Hinsichtlich der Art, Anzahl und Schreibweise der logischen Operatoren unterscheiden sich die einzelnen Programmiersprachen teilweise sehr stark voneinander (siehe Tabelle). Unterschiede gibt es auch hinsichtlich der internen Darstellung der Wahrheitswerte: In den meisten Programmiersprachen wird der Wahrheitswert falsch als die Zahl 0 dargestellt. Der Wahrheitswert wahr wird oft als die Zahl 1 dargestellt, vielfach wird aber auch jeder von 0 verschiedene Wert als wahr interpretiert. Eine bemerkenswerte Ausnahme bilden viele Kommandointerpreter, darunter die verschiedenen Unix-Shells, in denen der Erfolg eines ausgeführten Befehls durch den Rückgabewert 0, der Misserfolg durch einen von 0 verschiedenen Wert angezeigt wird, der die Art des aufgetretenen Fehlers aufzeigt. In Verallgemeinerung dessen wird in den logischen Ausdrücken dieser Kommandointerpreter der Wert 0 ("kein Fehler") als wahr interpretiert und jeder von 0 verschiedene Wert ("Fehler") als falsch.

Inhaltsverzeichnis

[Bearbeiten] Beispiele für logische Operatoren

Operator Mathematik Fortran Pascal C, C++, C#, Java
Vergleiche größer > .GT. > >
kleiner < .LT. < <
größer oder gleich \ge .GE. >= >=
kleiner oder gleich \le .LE. <= <=
gleich = .EQ. = ==
ungleich \ne .NE. <> !=
Verknüpfungen Und (Konjunktion) \wedge .AND. AND &, &&
Oder (Disjunktion) \vee .OR. OR |, ||
Nicht (Negation) \neg .NOT. NOT !

[Bearbeiten] Beispiele für logische Ausdrücke

IF a > b THEN DO

{
Programmcode
}

In diesem Fall wird bewertet, ob a größer ist als b. Ist die Aussage wahr wird der Programmcode ausgeführt, der mit DO eingeleitet wird. Andernfalls wird der Programmcode übersprungen.

IF i AND j THEN DO

{
Programmcode
}

In diesem Fall wird bewertet, ob i wahr ist und j wahr ist. Sind i und j wahr wird der Programmcode ausgeführt, der mit DO eingeleitet wird. Ist einer der Werte falsch (oder beide), wird der Programmcode übersprungen.

[Bearbeiten] Auswertungsreihenfolge, Kommutativität und Nebeneffekte

Die logischen Operatoren einer Programmiersprache sind keine exakte Entsprechung der Junktoren in der Aussagenlogik, weil bei der Bewertung von Junktoren keine Nebeneffekte auftreten können. In einer Programmiersprache kann das sehr wohl der Fall sein, wenn z. B. innerhalb des logischen Ausdrucks Funktionen mit Nebeneffekten aufgerufen werden (siehe Wirkung/Informatik). In diesem Fall spielt die Auswertungsreihenfolge eine Rolle, d. h. das Gesetz der Kommutativität (z. B. für die Konjunktion: a ∧ b = b ∧ a) gilt dann nicht, wenn a oder b nicht nur einen Wert, sondern auch eine Wirkung haben. Aus diesem Grund definieren die meisten Programmiersprachen eine feste Auswertungsreihenfolge für logische Ausdrücke.

Wenn man eine Konjunktion a ∧ b von links nach rechts auswertet und dabei feststellt, dass schon a falsch ist, weiß man bereits an dieser Stelle und ohne b näher betrachten zu müssen, dass die ganze Konjunktion falsch sein wird. Dieses Wissen kann man zur Optimierung der Laufzeit benützen, indem man in diesem Fall gänzlich auf die Auswertung von b verzichtet ("Lazy Evaluation") – allerdings um den Preis, dass dann ein eventueller Effekt von b ausbleibt. Aus diesem Grund ist die unkritische Ausdrucksoptimierung ein Problem. Es gibt zwei Möglichkeiten, damit umzugehen: Ausdrücke bzw. Ausdrucksteile mit Nebeneffekten können von der Optimierung ausgenommen, d. h. stets ausgewertet werden; oder aber das frühzeitige Abbrechen der Auswertung logischer Ausdrücke kann exakt in die Sprachspezifikation aufgenommen werden, sodass die Programmiererin zumindest genau vorhersagen kann, welche Nebeneffekte in welcher Situation auftreten und welche nicht.

Letzteres ist in Programmiersprachen wie C, C++ oder Java der Fall: Hier ist spezifiziert, dass bei der Auswertung einer Konjunktion a ∧ b, in der Schreibweise dieser Sprachen: a && b, die Auswertung von b unterbleibt, wenn bereits a falsch ist; und dass bei der Auswertung der Disjunktion a ∨ b, in der Schreibweise dieser Sprachen a || b die Auswertung von b unterbleibt, wenn bereits a wahr ist. Dies stellt keinen grundsätzlichen Unterschied zu den jeweiligen aussagenlogischen Junktoren dar, wenn die auszuwertenden Teilausdrücke wirkungsfrei sind.

Andere Programmiersprachen wie ADA bieten sowohl Konjunktionen und Disjunktionen im aussagenlogischen Sinn an ("AND" und "OR") als auch Operatoren wie das "&&" bzw. "||" in C, in ADA "AND THEN" bzw. "OR ELSE" genannt.

[Bearbeiten] Siehe auch

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -