Category:LSL Operators
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Page recreated to house the future revision of the LSL_Operators page into categorized Content. Please do not delete.
if you're looking for the current version, it may be found at LSL_Operators.
Operator Precedence (Order of Operations)
current rough draft of precedence
Operator | Description | Associativity |
---|---|---|
() [] |
Parenthesis List Constructor |
Inner to Outer then Right to Left |
, | Comma | Left to Right* |
++ -- | Increment/Decrement | Right to Left |
(type) ~ ! - |
Typecast Bitwise NOT Logical NOT Negation |
Right to Left |
/ % * | ^ |
Division Modulus Multiplication Bitwise OR Bitwise eXclusive OR |
Left to Right |
+ - |
Addition/Concatenation Subtraction |
Left to Right |
<< >> | Bitwise Shift Left/Right | Left to Right |
< > <= >= |
Less/Greater Than Less/Greater Than or Equal |
Left to Right |
== != | Equivalent/NOT Equivalent | Left to Right |
& | Bitwise AND | Left to Right? |
^ | Bitwise eXclusive OR | Left to Right? |
| | Bitwise OR | Left to Right? |
&& || | Logical AND / OR | Left to Right |
= += -= /= %= *= |
Assignment Additive/Subtractive/Divisive/Modulo/Multiplicative Assignment |
Right to Left* |
- both the Comma and the Assignment Operators are special cases
Commas promote operators all Operators to the Left However within parenthesis and brackets obey those respective precedences <lsl>//-- example: float a; float b; float c;
string uExample( float x, float y ){
return (string)x + " " + (string)y;
}
default{
state_entry(){ string vStrReport = "\n" + (string)(++a) + " " + (string)(++a); //-- first line reports "2.000000 1.000000" vStrReport += "\n" + (string)[++b, " ", ++b]; //-- second line reports "1.000000 2.000000" vStrReport += "\n" + uExample( ++c, ++c ); //-- third line reports "1.000000 2.000000" llOwnerSay( vStrReport ); }
}</lsl> Assigment operators Demote all precedences to the Left of them (but obey all precedences below above increment/decrement. <lsl>//-- example: integer a;
default{
state_entry(){ llOwnerSay( (string)(++a + a *= ++a) ); //-- yields "3" instead of "4" }
}</lsl>