Operator precedence

Description

The order of operator evaluation is listed below, where higher in the list means higher precedence.

() 

parentheses: grouping and evaluation precedence

integer val = a * (b + c);
[] 

brackets: list constructor

list lst = [a, 2, "this", 0.01];
(type) 

typecasting

string message = "The result is:" + (string)result;
!  ~  ++  -- 

logical NOT, bitwise NOT, increment, decrement

counter++;
*  /  % 

multiply/dot product, divide, modulus/cross product

integer rollover = (count + 1) % 5;
- 

subtraction, negation

integer one = 3 - 2;
+ 

addition, string concatenation

integer two = 1 + 1;
+ 

list concatenation

list myList = [1, 2, 3] + [4, 5];
<<  >> 

arithmetic shift

integer eight = 4 << 1;
<  <=  >  >= 

less than, less than or equal to, greater than, greater than or equal to

integer isFalse = (6 <= 4);
==  != 

comparison: equal, not equal

integer isFalse = ("this" == "that");
& 

bitwise AND

integer zero = 4 & 2;
^ 

bitwise XOR

integer zero = 4 ^ 4;
| 

bitwise OR

integer four = 4 | 4;
&&  || 

logical AND, logical OR

integer isFalse = (FALSE && TRUE);
=  +=  -=  *=  /=  %= 

assignment

integer four = 4;

Caveats

Conditional checks

Some conditional checks may need to be bracketed to prevent unexpected evaluation order. More specifically, take extra care when using operators with lower precedence than equality == !=. These include bitwise, logical and assignment operators.

if (TRUE && FALSE == FALSE || TRUE)
{
    llOwnerSay("TRUE");
}
else
{
    llOwnerSay("FALSE");
}
// outputs "TRUE" because the equality operator was evaluated first
// i.e. TRUE && (FALSE == FALSE) || TRUE


if ((TRUE && FALSE) == (FALSE || TRUE)) // <== add some brackets this time
{
    llOwnerSay("TRUE");
}
else
{
    llOwnerSay("FALSE");
}
// outputs "FALSE"

No short-circuiting

Unlike most other languages that use the C-style && and || operators, both operands are always evaluated. For example,

if (TRUE || 1 / 0) llSay(PUBLIC_CHANNEL, "Aha!"); // throws Math Error

© 2025 TOTO Lab.

Tutorial text and media are licensed under CC BY-NC 4.0, and code examples are CC0 by default unless noted otherwise in comments. You may share or adapt for non-commercial use with attribution.

Second Life and SL are trademarks of Linden Research, Inc. TOTO Lab and MIRAI TECH are not affiliated with or sponsored by Linden Research.