Scripting: Operators – Arma Reforger
Lou Montana (talk | contribs) (Add static arrays specificity) |
Lou Montana (talk | contribs) (Add <<=, >>= operators and sign extension warning) |
||
(7 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{{TOC|side}} | {{TOC|side}} | ||
'''Operators''' are elements used to generate operations between two values. | '''Operators''' are elements used to generate operations between two values. | ||
{{ | |||
{{TOC|subtoc|content= | |||
* 1 {{Link|#Precedence}} | |||
* 2 {{Link|#Types}} | |||
** 2.1 {{Link|#Assignment}} | |||
** 2.2 {{Link|#Arithmetic}} | |||
** 2.3 {{Link|#Relational}} | |||
** 2.4 {{Link|#Logical}} | |||
** 2.5 {{Link|#Bitwise}} | |||
** 2.6 {{Link|#String}} | |||
** 2.7 {{Link|#Indexing}} | |||
}} | |||
== Precedence == | |||
Operators precedence (one having execution priority over another) in Enforce Script is identical to the C language: | |||
<spoiler text="Show Enfusion Operator Precedence table"> | |||
{| class="wikitable" | |||
! Precedence | |||
! Operator | |||
! Description | |||
! Associativity | |||
|- | |||
! rowspan="5" | 1 | |||
| <enforce>++</enforce> | |||
| Postfix increment | |||
| rowspan="5" | Left-to-right | |||
|- | |||
| <enforce>--</enforce> | |||
| Postfix decrement | |||
|- | |||
| <enforce>()</enforce> | |||
| Function call | |||
|- | |||
| <enforce>[]</enforce> | |||
| Array subscripting | |||
|- | |||
| <enforce>.</enforce> | |||
| Element selection by reference | |||
|- | |||
! rowspan="8" | 2 | |||
| <enforce>++</enforce> | |||
| Prefix increment | |||
| rowspan="8" | Right-to-left | |||
|- | |||
| <enforce>--</enforce> | |||
| Prefix decrement | |||
|- | |||
| <enforce>+</enforce> | |||
| Unary plus | |||
|- | |||
| <enforce>-</enforce> | |||
| Unary minus | |||
|- | |||
| <enforce>!</enforce> | |||
| Logical NOT | |||
|- | |||
| <enforce>~</enforce> | |||
| Bitwise NOT | |||
|- | |||
| <enforce>new</enforce> | |||
| Dynamic memory allocation | |||
|- | |||
| <enforce>delete</enforce> | |||
| Dynamic memory deallocation | |||
|- | |||
! rowspan="3" | 3 | |||
| <enforce>*</enforce> | |||
| Multiplication | |||
| rowspan="3" | Left-to-right | |||
|- | |||
| <enforce>/</enforce> | |||
| Division | |||
|- | |||
| <enforce>%</enforce> | |||
| {{Link|https://en.wikipedia.org/wiki/Modulo_operation|Modulo}} (remainder) | |||
|- | |||
! rowspan="2" | 4 | |||
| <enforce>+</enforce> | |||
| Addition | |||
| rowspan="2" | Left-to-right | |||
|- | |||
| <enforce>-</enforce> | |||
| Subtraction | |||
|- | |||
! rowspan="2" | 5 | |||
| <enforce><<</enforce> | |||
| {{Link|https://en.wikipedia.org/wiki/Bitwise_operation|Bitwise}} left shift | |||
| rowspan="2" | Left-to-right | |||
|- | |||
| <enforce>>></enforce> | |||
| {{Link|https://en.wikipedia.org/wiki/Bitwise_operation|Bitwise}} right shift | |||
|- | |||
! rowspan="4" | 6 | |||
| <enforce><</enforce> | |||
| Less than | |||
| rowspan="4" | Left-to-right | |||
|- | |||
| <enforce><=</enforce> | |||
| Less than or equal to | |||
|- | |||
| <enforce>></enforce> | |||
| Greater than | |||
|- | |||
| <enforce>>=</enforce> | |||
| Greater than or equal to | |||
|- | |||
! rowspan="2" | 7 | |||
| <enforce>==</enforce> | |||
| Equal to | |||
| rowspan="2" | Left-to-right | |||
|- | |||
| <enforce>!=</enforce> | |||
| Not equal to | |||
|- | |||
! 11 | |||
| <enforce>&</enforce> | |||
| Bitwise AND | |||
| Left-to-right | |||
|- | |||
! 12 | |||
| <enforce>^</enforce> | |||
| Bitwise XOR (e'''x'''clusive '''or''') | |||
| Left-to-right | |||
|- | |||
! 13 | |||
| <enforce>|</enforce> | |||
| Bitwise OR (inclusive or) | |||
| Left-to-right | |||
|- | |||
! 14 | |||
| <enforce>&&</enforce> | |||
| Logical AND | |||
| Left-to-right | |||
|- | |||
! 15 | |||
| <enforce>||</enforce> | |||
| Logical OR | |||
| Left-to-right | |||
|- | |||
! rowspan="11" | 8 | |||
| <enforce>=</enforce> | |||
| Direct assignment | |||
| rowspan="11" | Right-to-left | |||
|- | |||
| <enforce>+=</enforce> | |||
| Assignment by sum | |||
|- | |||
| <enforce>-=</enforce> | |||
| Assignment by difference | |||
|- | |||
| <enforce>*=</enforce> | |||
| Assignment by product | |||
|- | |||
| <enforce>/=</enforce> | |||
| Assignment by quotient | |||
|- | |||
| <enforce>%=</enforce> | |||
| Assignment by remainder | |||
|- | |||
| <enforce><<=</enforce> | |||
| Assignment by bitwise left shift | |||
|- | |||
| <enforce>>>=</enforce> | |||
| Assignment by bitwise right shift | |||
|- | |||
| <enforce>&=</enforce> | |||
| Assignment by bitwise AND | |||
|- | |||
| <enforce>^=</enforce> | |||
| Assignment by bitwise XOR | |||
|- | |||
| <enforce>|=</enforce> | |||
| Assignment by bitwise OR | |||
|} | |||
</spoiler> or see the {{Link|https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence|Wikipedia article section}}. | |||
Line 9: | Line 186: | ||
<div style="font-family: monospace"> | <div style="font-family: monospace"> | ||
==== | ==== = ==== | ||
</div> | </div> | ||
The "assign operator sets the righthand value to the lefthand variable. | The "assign" operator sets the righthand value to the lefthand variable. | ||
<enforce> | <enforce> | ||
int five = 5; | int five = 5; | ||
Line 71: | Line 248: | ||
<div style="font-family: monospace"> | <div style="font-family: monospace"> | ||
==== + | ==== += ==== | ||
</div> | </div> | ||
The "add to" operator adds the righthand value to the lefthand variable. | The "add to" operator adds the righthand value to the lefthand variable. | ||
Line 80: | Line 257: | ||
<div style="font-family: monospace"> | <div style="font-family: monospace"> | ||
==== - | ==== -= ==== | ||
</div> | </div> | ||
The "subtract from" operator subtract the righthand value to the lefthand variable. | The "subtract from" operator subtract the righthand value to the lefthand variable. | ||
Line 89: | Line 266: | ||
<div style="font-family: monospace"> | <div style="font-family: monospace"> | ||
==== * | ==== *= ==== | ||
</div> | </div> | ||
The "multiply with" operator multiplies the lefthand variable with the righthand value. | The "multiply with" operator multiplies the lefthand variable with the righthand value. | ||
Line 98: | Line 275: | ||
<div style="font-family: monospace"> | <div style="font-family: monospace"> | ||
==== / | ==== /= ==== | ||
</div> | </div> | ||
The "divide by" operator multiplies the lefthand variable with the righthand value. | The "divide by" operator multiplies the lefthand variable with the righthand value. | ||
Line 105: | Line 282: | ||
result /= 3; // result is 1 (floored int value) | result /= 3; // result is 1 (floored int value) | ||
</enforce> | </enforce> | ||
<div style="font-family: monospace"> | |||
==== <<= ==== | |||
</div> | |||
The "left-offset by" operator offsets the lefthand variable to the left by the righthand value. | |||
<enforce> | |||
int result = 0x0000FF32; | |||
result <<= 8; // result is 0x00FF3200 | |||
</enforce> | |||
<div style="font-family: monospace"> | |||
==== >>= ==== | |||
</div> | |||
The "right-offset by" operator offsets the lefthand variable to the right by the righthand value. | |||
<enforce> | |||
int result = 0x00FF3200; | |||
result >>= 8; // result is 0x0000FF32 | |||
</enforce> | |||
{{Feature|important| | |||
Beware of {{Link|https://en.wikipedia.org/wiki/Sign_extension|sign extension}}: | |||
<enforce> | |||
int result = 0x80000000; | |||
result >>= 8; // result is 0x<u>'''FF'''</u>800000 | |||
</enforce> | |||
}} | |||
=== Arithmetic === | === Arithmetic === | ||
Line 133: | Line 335: | ||
The multiplication sign does a multiplication between two numerical values, float and/or integer. | The multiplication sign does a multiplication between two numerical values, float and/or integer. | ||
<enforce> | <enforce> | ||
5 * 3; | 5 * 3; // result is 15 | ||
5 * 2.5; // result is 12.5 (float) | 5 * 2.5; // result is 12.5 (float) | ||
1.5 * 3.25; // result is 4.875 (float) | 1.5 * 3.25; // result is 4.875 (float) | ||
</enforce> | </enforce> | ||
Line 145: | Line 347: | ||
If both values are int, the return value will be a '''floored''' integer as well. | If both values are int, the return value will be a '''floored''' integer as well. | ||
<enforce> | <enforce> | ||
5 / 3; | 5 / 3; // result is 1 (int): 5/3 = 1.666(...), but integer floors the value | ||
5 / 2.5; // result is 2.0 (float) | 5 / 2.5; // result is 2.0 (float) | ||
3.5 / 0.5; // result is 7.0 (float) | 3.5 / 0.5; // result is 7.0 (float) | ||
</enforce> | </enforce> | ||
Line 157: | Line 359: | ||
{{Feature|informative|See the <enforce inline>Math.Repeat()</enforce> method for a float modulo approximation.}} | {{Feature|informative|See the <enforce inline>Math.Repeat()</enforce> method for a float modulo approximation.}} | ||
<enforce> | <enforce> | ||
5 % 3; // result is 2: 5 is one time 3, remaining 2 | 5 % 3; // result is 2: 5 is one time 3, remaining 2 | ||
10 % 2; // result is 0: 10 is five times 2, remaining 0 | 10 % 2; // result is 0: 10 is five times 2, remaining 0 | ||
</enforce> | </enforce> | ||
Line 170: | Line 372: | ||
It can be applied to int, float or a mix of those. | It can be applied to int, float or a mix of those. | ||
<enforce> | <enforce> | ||
10 > 11; // false | 10 > 11; // false | ||
10 > 10; // false | 10 > 10; // false | ||
10 > 9; // true | 10 > 9; // true | ||
10 > 5; | 10 > 5; // true | ||
10 > 5.5; // true | 10 > 5.5; // true | ||
10.5 > 5; // true | 10.5 > 5; // true | ||
</enforce> | </enforce> | ||
Line 185: | Line 387: | ||
It can be applied to int, float or a mix of those. | It can be applied to int, float or a mix of those. | ||
<enforce> | <enforce> | ||
10 < 11; // true | 10 < 11; // true | ||
10 < 10; // false | 10 < 10; // false | ||
10 < 9; // false | 10 < 9; // false | ||
10 < 5; | 10 < 5; // false | ||
10 < 5.5; // false | 10 < 5.5; // false | ||
10.5 < 5; // false | 10.5 < 5; // false | ||
</enforce> | </enforce> | ||
<div style="font-family: monospace"> | <div style="font-family: monospace"> | ||
==== > | ==== >= ==== | ||
</div> | </div> | ||
The "greater than or equal" operator returns '''true''' if the left argument is greater than or equal to the right argument, false otherwise.<br> | The "greater than or equal" operator returns '''true''' if the left argument is greater than or equal to the right argument, false otherwise.<br> | ||
It can be applied to int, float or a mix of those. | It can be applied to int, float or a mix of those. | ||
<enforce> | <enforce> | ||
10 >= 11; // false | 10 >= 11; // false | ||
10 >= 10; // true | 10 >= 10; // true | ||
10 >= 9; // true | 10 >= 9; // true | ||
10 >= 5; // true | 10 >= 5; // true | ||
10 >= 5.5; // true | 10 >= 5.5; // true | ||
10.5 >= 5; // true | 10.5 >= 5; // true | ||
</enforce> | </enforce> | ||
<div style="font-family: monospace"> | <div style="font-family: monospace"> | ||
==== < | ==== <= ==== | ||
</div> | </div> | ||
The "lesser than or equal" operator returns '''true''' if the left argument is smaller than or equal to the right argument, false otherwise.<br> | The "lesser than or equal" operator returns '''true''' if the left argument is smaller than or equal to the right argument, false otherwise.<br> | ||
It can be applied to int, float or a mix of those. | It can be applied to int, float or a mix of those. | ||
<enforce> | <enforce> | ||
10 <= 11; // true | 10 <= 11; // true | ||
10 <= 10; // true | 10 <= 10; // true | ||
10 <= 9; // false | 10 <= 9; // false | ||
10 <= 5; // false | 10 <= 5; // false | ||
10 <= 5.5; // false | 10 <= 5.5; // false | ||
10.5 <= 5; // false | 10.5 <= 5; // false | ||
</enforce> | </enforce> | ||
<div style="font-family: monospace"> | <div style="font-family: monospace"> | ||
==== | ==== == ==== | ||
</div> | </div> | ||
The "equals" operator returns '''true''' if the left argument is strictly equal to the right argument, false otherwise. | The "equals" operator returns '''true''' if the left argument is strictly equal to the right argument, false otherwise. | ||
Applies to: | Applies to: | ||
* | * bool | ||
* int | * int | ||
* float | * float | ||
Line 259: | Line 461: | ||
<div style="font-family: monospace"> | <div style="font-family: monospace"> | ||
==== ! | ==== != ==== | ||
</div> | </div> | ||
The "different" operator returns '''true''' if the left argument is different from the right argument, false otherwise. | The "different" operator returns '''true''' if the left argument is different from the right argument, false otherwise. | ||
Applies to: | Applies to: | ||
* | * bool | ||
* int | * int | ||
* float | * float | ||
Line 296: | Line 498: | ||
The "and" operator returns '''true''' if both left and right conditions are true. | The "and" operator returns '''true''' if both left and right conditions are true. | ||
<enforce> | <enforce> | ||
bool a = false; | |||
bool b = false; | |||
bool result = a && b; // result is false | |||
bool a = true; | |||
bool b = false; | |||
bool result = a && b; // result is false | |||
bool a = true; | |||
bool b = true; | |||
bool result = a && b; // result is true | |||
</enforce> | </enforce> | ||
Line 314: | Line 516: | ||
The "or" logical operator returns '''true''' if left or right condition is true (or both). | The "or" logical operator returns '''true''' if left or right condition is true (or both). | ||
<enforce> | <enforce> | ||
bool a = false; | |||
bool b = false; | |||
bool result = a || b; // result is false | |||
bool a = true; | |||
bool b = false; | |||
bool result = a || b; // result is true | |||
bool a = true; | |||
bool b = true; | |||
bool result = a || b; // result is true | |||
</enforce> | </enforce> | ||
Line 330: | Line 532: | ||
==== ! ==== | ==== ! ==== | ||
</div> | </div> | ||
The "not" logical operator inverts a | The "not" logical operator inverts a bool value: {{hl|true}} becomes {{hl|false}} and {{hl|false}} becomes {{hl|true}}.<br> | ||
It can also be used on: | It can also be used on: | ||
* int or float (0 comparison) | * int or float (0 comparison) | ||
Line 336: | Line 538: | ||
* object (null comparison) | * object (null comparison) | ||
<enforce> | <enforce> | ||
bool a = true; | |||
bool result = !a; // result is false | |||
bool a = false; | |||
bool result = !a; // result is true | |||
bool isAlive = player.IsAlive(); | |||
bool isDead = !isAlive; | |||
int health = 0; | int health = 0; | ||
if (!health) // same as if (health == 0) | if (!health) // same as if (health == 0) - not recommended | ||
Print("dead"); | Print("dead"); | ||
float fHealth = 0.0; | float fHealth = 0.0; | ||
if (!fHealth) // same as if (fHealth == 0) | if (!fHealth) // same as if (fHealth == 0) - not recommended | ||
Print("dead"); | Print("dead"); | ||
string data = ""; | string data = ""; | ||
if (!data) // same as if (data.IsEmpty()) and if (data == "") | if (!data) // same as if (data.IsEmpty()) and if (data == "") - not recommended | ||
Print("empty string"); | Print("empty string"); | ||
MyClass instance = null; | MyClass instance = null; | ||
if (!instance) // same as if (instance == null) | if (!instance) // same as if (instance == null) | ||
Print("instance is null!"); | Print("instance is null!"); | ||
// note that if (value) to check an object is -not- null works too | // note that if (value) to check an object is -not- null works too | ||
if (instance) // same as if (instance != null) | if (instance) // same as if (instance != null) | ||
Print("instance is NOT null!"); | Print("instance is NOT null!"); | ||
</enforce> | </enforce> | ||
Line 450: | Line 642: | ||
string result = a + " " + b; // result is "Hello there" | string result = a + " " + b; // result is "Hello there" | ||
string | string stringifiedBool = "string " + true; // result is "string true" | ||
string stringifiedInt = "string " + 42; // result is "string 42" | string stringifiedInt = "string " + 42; // result is "string 42" | ||
string stringifiedFloat = "string " + 4.0; // result is "string 4" | string stringifiedFloat = "string " + 4.0; // result is "string 4" | ||
Line 490: | Line 682: | ||
in order to save unrequired method calls, either use {{Link|Arma Reforger:Scripting: Keywords#foreach|foreach}} or cache the call result whenever possible. | in order to save unrequired method calls, either use {{Link|Arma Reforger:Scripting: Keywords#foreach|foreach}} or cache the call result whenever possible. | ||
<enforce> | <enforce> | ||
// bad | |||
for (int i, count = myArray.Count(); i < count; i++) | for (int i, count = myArray.Count(); i < count; i++) | ||
{ | { | ||
Line 495: | Line 688: | ||
Print("#" + i + " is empty"); | Print("#" + i + " is empty"); | ||
else | else | ||
Print("trimmed '" + myArray[i] + "' is '" + myArray[i].Trim() | Print("trimmed '" + myArray[i] + "' is '" + myArray[i].Trim() + "'"); // .Get(i) equivalent, twice | ||
} | } | ||
// good | |||
for (int i, count = myArray.Count(); i < count; i++) | for (int i, count = myArray.Count(); i < count; i++) | ||
{ | { | ||
Line 505: | Line 698: | ||
Print("#" + i + " is empty"); | Print("#" + i + " is empty"); | ||
else | else | ||
Print("trimmed '" + value + "' is '" + value.Trim() | Print("trimmed '" + value + "' is '" + value.Trim() + "'"); | ||
} | } | ||
// best | |||
foreach (int i, string value : myArray) | foreach (int i, string value : myArray) | ||
{ | { | ||
Line 514: | Line 707: | ||
Print("#" + i + " is empty"); | Print("#" + i + " is empty"); | ||
else | else | ||
Print("trimmed '" + value + "' is '" + value.Trim() | Print("trimmed '" + value + "' is '" + value.Trim() + "'"); | ||
} | } | ||
</enforce> | </enforce> | ||
Line 520: | Line 713: | ||
{{GameCategory|armaR|Modding|Scripting|Guidelines}} | |||
{{GameCategory|armaR|Modding|Guidelines |
Latest revision as of 21:25, 24 July 2025
Operators are elements used to generate operations between two values.
- 1 Precedence
- 2 Types
- 2.1 Assignment
- 2.2 Arithmetic
- 2.3 Relational
- 2.4 Logical
- 2.5 Bitwise
- 2.6 String
- 2.7 Indexing
Precedence
Operators precedence (one having execution priority over another) in Enforce Script is identical to the C language:
Precedence | Operator | Description | Associativity |
---|---|---|---|
1 | ++ |
Postfix increment | Left-to-right |
-- |
Postfix decrement | ||
() |
Function call | ||
[] |
Array subscripting | ||
. |
Element selection by reference | ||
2 | ++ |
Prefix increment | Right-to-left |
-- |
Prefix decrement | ||
+ |
Unary plus | ||
- |
Unary minus | ||
! |
Logical NOT | ||
~ |
Bitwise NOT | ||
new |
Dynamic memory allocation | ||
delete |
Dynamic memory deallocation | ||
3 | * |
Multiplication | Left-to-right |
/ |
Division | ||
% |
Modulo (remainder) | ||
4 | + |
Addition | Left-to-right |
- |
Subtraction | ||
5 | << |
Bitwise left shift | Left-to-right |
>> |
Bitwise right shift | ||
6 | < |
Less than | Left-to-right |
<= |
Less than or equal to | ||
> |
Greater than | ||
>= |
Greater than or equal to | ||
7 | == |
Equal to | Left-to-right |
!= |
Not equal to | ||
11 | & |
Bitwise AND | Left-to-right |
12 | ^ |
Bitwise XOR (exclusive or) | Left-to-right |
13 | | |
Bitwise OR (inclusive or) | Left-to-right |
14 | && |
Logical AND | Left-to-right |
15 | || |
Logical OR | Left-to-right |
8 | = |
Direct assignment | Right-to-left |
+= |
Assignment by sum | ||
-= |
Assignment by difference | ||
*= |
Assignment by product | ||
/= |
Assignment by quotient | ||
%= |
Assignment by remainder | ||
<<= |
Assignment by bitwise left shift | ||
>>= |
Assignment by bitwise right shift | ||
&= |
Assignment by bitwise AND | ||
^= |
Assignment by bitwise XOR | ||
|= |
Assignment by bitwise OR |
or see the Wikipedia article section.
Types
Assignment
=
The "assign" operator sets the righthand value to the lefthand variable.
++
The increment (or post-increment) operator adds 1 to the provided numerical variable. It only applies to int and float values.
This operator can be used before the value as well (it is then called pre-increment operator):
The difference is that the returned value is incremented too:
--
The decrement (or post-decrement) operator removes 1 to the provided numerical variable. It only applies to int and float values.
Same as ++, this operator can be used before the value (then called pre-decrement operator):
+=
The "add to" operator adds the righthand value to the lefthand variable.
-=
The "subtract from" operator subtract the righthand value to the lefthand variable.
*=
The "multiply with" operator multiplies the lefthand variable with the righthand value.
/=
The "divide by" operator multiplies the lefthand variable with the righthand value.
<<=
The "left-offset by" operator offsets the lefthand variable to the left by the righthand value.
>>=
The "right-offset by" operator offsets the lefthand variable to the right by the righthand value.
Arithmetic
+
he "adds" operator does an addition between two numeric values, float and/or integer.
-
The "subtract from" operator does a subtraction between two numerical values, float and/or integer.
*
The multiplication sign does a multiplication between two numerical values, float and/or integer.
/
The "divided by" operator divides the left argument by the right one.
It can be applied to int, float or a mix of those.
If both values are int, the return value will be a floored integer as well.
%
Modulo is an operator that gives the remainder of a division.
It only applies to integers.
Relational
>
The "greater than" operator returns true if the left argument is strictly greater than the right argument, false otherwise.
It can be applied to int, float or a mix of those.
<
The "lesser than" operator returns true if the left argument is strictly smaller than the right argument, false otherwise.
It can be applied to int, float or a mix of those.
>=
The "greater than or equal" operator returns true if the left argument is greater than or equal to the right argument, false otherwise.
It can be applied to int, float or a mix of those.
<=
The "lesser than or equal" operator returns true if the left argument is smaller than or equal to the right argument, false otherwise.
It can be applied to int, float or a mix of those.
==
The "equals" operator returns true if the left argument is strictly equal to the right argument, false otherwise.
Applies to:
- bool
- int
- float
- int / float, float / int
- string (case-sensitive)
- vector (value)
- array (reference)
- object (reference)
!=
The "different" operator returns true if the left argument is different from the right argument, false otherwise.
Applies to:
- bool
- int
- float
- int / float, float / int
- string (case-sensitive)
- vector (value)
- array (reference)
- object (reference)
Logical
&&
The "and" operator returns true if both left and right conditions are true.
||
The "or" logical operator returns true if left or right condition is true (or both).
!
The "not" logical operator inverts a bool value: true becomes false and false becomes true.
It can also be used on:
- int or float (0 comparison)
- string (empty string comparison - usage of the string.IsEmpty() method is preferred)
- object (null comparison)
Bitwise
&
The "bitwise AND" operator applies a AND operation between values bits - both bits must be 1 to return 1, otherwise 0 is returned.
|
The "bitwise OR" operator applies a OR operation between values bits - one of the bits must be 1 to return 1, otherwise 0 is returned.
~
The "bitwise NOT" operator reverts all bits of the provided value: 1 becomes 0 and vice-versa.
<<
The left shift operator moves all bits of the provided value to the left.
>>
The right shift operator moves bits of the provided value to the right.
String
+
The "adds" operator used with strings concatenates them. When it is used with string and another type, it will stringify (calling its .ToString() method) the other value. The left argument must be of string type for it to happen.
Indexing
[]
The "get index" operator is used on arrays to get an element by its zero-based index (e.g 0 is first element, 1 is second, etc). It is very efficient on static arrays. It can also be used on strings, as strings are arrays of characters.