Difference between revisions of "LSL Operators/de"
m (→{{Wikipedia|De Morgan's Gesetze|w=n}}: wikipedia link didn't work bec. it linked to English wikipedia, so I removed it) |
m (→{{Wikipedia|De Morgan's Gesetze|w=n}}: wikipedia link in section's title didn't work bec. it linked to English wikipedia, so I changed it) |
||
Line 159: | Line 159: | ||
|} | |} | ||
== | ==[http://de.wikipedia.org/wiki/De_Morgansche_Gesetze De Morgansche Regeln]== | ||
{| {{Prettytable|style=margin-top:0; float:left;}} | {| {{Prettytable|style=margin-top:0; float:left;}} | ||
|+ Bitweise Gleichwertigkeiten | |+ Bitweise Gleichwertigkeiten |
Revision as of 21:21, 7 September 2014
LSL Portal | Funktionen | Ereignisse | Typen | Konstanten | Datenflusskontrolle | Script Sammlung | Tutorien |
Operatoren sind Zeichen mit denen man Informationen aus Variablen auf vordefinierte Weise verarbeiten lassen kann. Eine (mathematische) Aktion kann auf eine oder zwei Operanden angewendet werden. Ein einfaches Beispiel ist 1 + 2, wobei die Zahlen 1 und 2 die Operanden darstellen, und + ist der Operator.
Operator | Beschreibung | Anwendungsbeispiel |
---|---|---|
() | Klammern | a * (b + c) |
[] | Eckige Klammern: Listen-Konstruktor | [a, 2, "this", 0.01] |
(type) | Typkonvertierung | message = "Das Ergebnis lautet:" + (string) ergebnis; |
! ~ ++ -- | Logisches-NICHT, Bitweises-NICHT, Inkrement, Dekrement | counter++; |
* / % | Multiplikations/Skalarprodukt, Division, Modulus/Kreuzprodukt | rest = (anzahl + 1)%5; |
- | Substraktion | eins = 3 - 2; |
+ | Addition oder String-Verknüpfung | two = 1+1;
text = "Hello" + "World"; |
+ | Konkatenation oder Zusammenführung von Listen | meineListe = [1, 2, 3] + [4, 5];
neueListe = alteListe + zusatzListe; |
<< >> | Links Shift, Rechts Shift | acht = 4 << 1; |
< <= > >= | Kleiner Als, Kleiner Als oder Gleich,
Größer Als, Größer Als oder Gleich |
istFalsch = (6 <= 4); |
== != | Vergleich auf Gleichheit, Vergleich auf Ungleichheit | istFalsch = ("dies" == "das"); |
& | Bitweises UND | zero = 4 & 2;
four = 4 & 4; |
^ | Bitweises XOR | zero = 4 ^ 4;
six = 4 ^ 2; |
| | Bitweises ODER | vier = 4 | 4;
six = 4 | 2; |
|| | Logisches ODER | istWahr = (FALSE || TRUE); |
&& | Logisches UND | istFalsch = (FALSE && TRUE); |
= += -= *= /= %= | Zuweisung | vier = 4; |
Anmerkung: Anders als in den meisten anderen Programmiersprachen die den C-Stil für && und || Operatoren anwenden, werden beide Operanden immer ausgewertet. Zum Beispiel:
<lsl>if (TRUE || 1/0) llSay(PUBLIC_CHANNEL, "Aha!");</lsl>
führt zu einer Fehlermeldung, statt "Aha" auszugeben.
Anmerkung: Die ++ (Inkrement) und -- (Dekrement) - Operatoren wirken sich auf die Zahl entweder vor oder nach der Auswertung aus, je nachdem ob sie vor oder nach dieser Zahl stehen.
<lsl>integer count; if(!(++count)) // Wird erhöht, und danach ausgewertet. llSay(PUBLIC_CHANNEL, "Aha"); // Wird nicht ausgegeben.</lsl>
<lsl>integer count; if(!(count++)) // Wird ausgewertet und danach erhöht. llSay(PUBLIC_CHANNEL, "Aha"); // Wird ausgegeben.</lsl>
Anmerkung: Die Boole'schen Operatoren || und && werden in der Auswertungs-Reihenfolge von LSL als gleichwertig angesehen.
Anmerkung: Die Auswertunsreihenfolge unterscheidet sich von der Auswertungsreihenfolge der meisten Programmiersprachen. Wenn der Wert von x im nachfolgenden Beispiel initial 1 ist, dann werden die zwei Bedingungen unterhalb als FALSCH ausgewertet, und die nächsten beiden als WAHR:
<lsl>(x && (x = 0) == 0 && x)</lsl> <lsl>(x && (x = 0) == 0 && x == 0)</lsl> <lsl>(x == 0 && (x = 0) == 0)</lsl> <lsl>(x == 0 && (x = 0) == 0 && x)</lsl>
Beide Seiten werden ausgewertet, unabhängig davon ob eine der Seiten WAHR ist.
Anmerkung: Gleichheits-Test bei Listen vergleichen nicht deren Inhalte, sondern lediglich deren Länge.
Linker Typ | Rechter Typ | Ergebnistyp | Beschreibung |
---|---|---|---|
integer | integer | integer | Addiert links und rechts |
integer | float | float | Addiert links und rechts |
float | integer | float | Addiert links und rechts |
string | string | string | Hängt rechts an das Ende von links an. |
list | * | list | Hängt rechts nach dem Ende von links an. |
* | list | list | Fügt links vor dem Start von rechts ein. |
vector | vector | vector | Addiert links und rechts |
rotation | rotation | rotation | Addiert links und rechts Nicht brauchbar um Rotationen zu kombinieren, stattdessen verwendet man die Operatoren * oder /. |
Einfacher Zuweisungsoperator | Operator-Abkürzung (shorthand operator) |
---|---|
a = a + 1 | a += 1 |
a = a – 1 | a -= 1 |
a = a * (n+1) | a *= (n+1) |
a = a / (n+1) | a /= (n+1) |
a = a % b | a %= b |
De Morgansche Regeln
UND | ODER |
---|---|
~(a & b) |
~a | ~b
|
~a & ~b |
~(a | b)
|
a & ~b |
~(~a | b)
|
~(a & ~b) |
~a | b
|
UND | ODER |
---|---|
!(a && b) |
!a || !b
|
!a && !b |
!(a || b)
|
a && !b |
!(!a || b)
|
!(a && !b) |
!a || b
|
Nach den De Morganschen Regeln (zeilenweise dargestellt), ist der Code in der UND Spalte logisch equivalent zum Code ind er ODER. a und b müssen nicht zwangsläufig Variablen sein, sondern können auch Ausdrücke sein. In speziellen Fällen kann man diese Gleichwertigkeiten anwenden, um komplexen Code vereinfacht darzustellen. Es ist wichtig diese zwei Tabellen nicht zu verwechseln wenn man sie anwendet. Die ersten beiden Zeilen stellen die De Morganschen Regeln dar wie postuliert, und die letzten beiden Zeilen bauen darauf auf.