# Operators

Operators in TorqueScript behave very similarly to operators in real world math and other programming languages. You should recognize quite a few of these from math classes you took in school, but with small syntactical changes. The rest of this section will explain the syntax and show a brief example, but we will cover these in depth in later guides.

## Arithmetic Operators

These are your basic math ops.

Operator Name Example Explanation
`*` multiplication `\$a * \$b` Multiply `\$a` and `\$b`.
`/` division `\$a / \$b` Divide `\$a` by `\$b`.
`%` modulo `\$a % \$b` Remainder of `\$a` divided by `\$b`.
`+` addition `\$a + \$b` Add `\$a` and `\$b`.
`-` subtraction `\$a - \$b` Subtract `\$b` from `\$a`.
`++`

auto-increment

(post-fix only)

`\$a++` Increment `\$a`.
`--`

auto-decrement

(post-fix only)

`\$b--` Decrement `\$b`.

Quote

`++\$a` is illegal. The value of `\$a++` is that of the incremented variable: auto-increment is post-fix in syntax, but pre-increment in sematics (the variable is incremented, before the return value is calculated). This behavior is unlike that of C and C++.

Quote

`--\$b` is illegal. The value of `\$a--` is that of the decremented variable: auto-decrement is post-fix in syntax, but pre-decrement in sematics (the variable is decremented, before the return value is calculated). This behavior is unlike that of C and C++.

## Relational Operators

Used in comparing values and variables against each other.

Operator Name Example Explanation
`<` Less than `\$a < \$b` 1 if `\$a` is less than `\$b`
`>` More than `\$a > \$b` 1 if `\$a` is greater than `\$b`
`<=` Less than or Equal to `\$a <= \$b` 1 if `\$a` is less than or equal to `\$b`
`>=` More than or Equal to `\$a >= \$b` 1 if `\$a` is greater than or equal to `\$b`
`==` Equal to `\$a == \$b` 1 if `\$a` is equal to `\$b`
`!=` Not equal to `\$a != \$b` 1 if `\$a` is not equal to `\$b`
`!` Logical NOT `!\$a` 1 if `\$a` is 0
`&&` Logical AND `\$a && \$b` 1 if `\$a` and `\$b` are both non-zero
`||` Logical OR `\$a || \$b` 1 if either `\$a` or `\$b` is non-zero
`\$=` String equal to `\$c \$= \$d` 1 if `\$c` equal to `\$d`.
`!\$=` String not equal to `\$c !\$= \$d` 1 if `\$c` not equal to `\$d`.

## Bitwise Operators

Used for comparing and shifting bits.

Operator Name Example Explanation
`~` Bitwise complement `~\$a` flip bits 1 to 0 and 0 to 1
`&` Bitwise AND `\$a & \$b` composite of elements where bits in same position are 1
`|` Bitwise OR `\$a | \$b` composite of elements where bits 1 in either of the two elements
`^` Bitwise XOR `\$a ^ \$b` composite of elements where bits in same position are opposite
`<<` Left Shift `\$a << 3` element shifted left by 3 and padded with zeros
`>>` Right Shift `\$a >> 3` element shifted right by 3 and padded with zeros

## Assignment Operators

Used for setting the value of variables.

Operator Name Example Explanation
`=` Assignment `\$a = \$b;` Assign value of `\$b` to `\$a`
`op=` Assignment Operators `\$a op= \$b;` Equivalent to `\$a = \$a op \$b`, where op can be any of: * / % + - & | ^ << >>

Quote

The value of an assignment is the value being assigned, so `\$a = \$b = \$c` is legal.

## String Operators

There are special values you can use to concatenate strings and variables. Concatenation refers to the joining of multiple values into a single variable. The following is the basic syntax:

`"string 1" operation "string 2"`

You can use string operators similarly to how you use mathematical operators (=, +, -, *). You have four operators at your disposal:

Operator Name Example Explanation
`@` String concatenation `\$c @ \$d` Concatenates strings \$c and \$d into a single string. Numeric literals/variables convert to strings.
`NL` New Line `\$c NL \$d` Concatenates strings \$c and \$d into a single string separated by new-line. Such a string can be decomposed with getRecord()
`TAB` Tab `\$c TAB \$d` Concatenates strings \$c and \$d into a single string separated by tab. Such a string can be decomposed with getField()
`SPC` Space `\$c SPC \$d` Concatenates strings \$c and \$d into a single string separated by space. Such a string can be decomposed with getWord()

## Miscellaneous Operators

General programming operators.

Operator Name Example Explanation
`? :` Conditional `x ? y : z` Evaluates to `y` if `x` equal to 1, else evaluates to `z`
`[]` Array element `\$a[5]` Synonymous with `\$a5`
`( )` Delimiting, Grouping

`t2dGetMin(%a, %b)`

`if ( \$a == \$b )`

`(\$a+\$b)*(\$c-\$d)`

Argument list for function call

Used with if, for, while, switch keywords

Control associativity in expressions

`{}` Compound statement

`if (1) {\$a = 1; \$b = 2;}`

`function foo() {\$a = 1;}`

Delimit multiple statements, optional for if, else, for, while

Required for switch, datablock, new, function

`,` Listing

`t2dGetMin(%a, %b)`

`%M[1,2]`

Delimiter for arguments
`::` Namespace `Item::onCollision()` This definition of the `onCollision()` function is in the `Item` namespace
`.` Field/Method selection

`%obj.field`

`%obj.method()`

Select a console method or field
`//` Single-line comment `// This is a comment` Used to comment out a single line of code
`/* */` Multi-line comment

`/*This is a a`

`multi-line`

`comment*/`

Used to comment out multiple consecutive lines

`/*` opens the comment, and `*/` closes it

Quote

There is no “comma operator”, as defined in C/C++; `\$a = 1, \$b = 2;` is a parse error.