Latimer supports a variety of operators for arithmetic, logic, assignment, comparisons, and more. This page provides an overview of all supported operators, grouped by category.
Arithmetic
Arithmetic operators perform basic mathematical operations:
| Operator | Description | Example |
|---|---|---|
+ |
Addition | a + b |
- |
Subtraction | a - b |
* |
Multiplication | a * b |
/ |
Division | a / b |
% |
Modulo (remainder) | a % b |
These operators work on numeric types like int and double.
Logical
Logical operators evaluate boolean expressions:
| Operator | Description | Example |
|---|---|---|
&& |
Logical AND | a && b |
|| |
Logical OR | a || b |
! |
Logical NOT (unary) | !a |
Operands must be boolean values (true or false). Logical operators does not perform a short-circuit evaluation.
Comparison
Comparison operators compare values and return a boolean result:
| Operator | Description | Example |
|---|---|---|
== |
Equal to | a == b |
!= |
Not equal to | a != b |
< |
Less than | a < b |
<= |
Less than or equal | a <= b |
> |
Greater than | a > b |
>= |
Greater than or equal | a >= b |
Operands must be of compatible types (e.g., comparing int to int or string to string).
Assignment
Assignment in Latimer is done using the = operator.
int a;
a = 10;
int b = a = 5; // b is 5, a is also 5
Assignments are expressions that return the assigned value.
string name;
if ((name = read_name()) != "") {
print("Hello, " + name + "!");
} else {
print("No name provided.");
}
Note: The left-hand side of an assignment must be an existing variable identifier.
Bitwise
Bitwise operators operate on the binary representation of integer values:
| Operator | Description | Example |
|---|---|---|
& |
Bitwise AND | a & b |
| |
Bitwise OR | a | b |
^ |
Bitwise XOR | a ^ b |
~ |
Bitwise NOT (unary) | ~a |
<< |
Left shift | a << 2 |
>> |
Right shift | a >> 1 |
These are only valid on int values.
Ternary
The ternary operator allows for concise conditional expressions. It follows the format:
condition ? value_if_true : value_if_false;
The condition must evaluate to a boolean value. If the condition is true, the expression evaluates to value_if_true; otherwise, it evaluates to value_if_false. value_if_true must be of the same type as value_if_false.
For example,
int score = 85;
string result = score >= 60 ? "Pass" : "Fail";
print(result);
// Prints: "Pass"
is equivalent to
string result;
if (score >= 60) {
result = "Pass";
} else {
result = "Fail";
}
Precedence & Associativity
The following table shows Latimer’s operator precedence, from highest to lowest. Operators on the same line have equal precedence and are evaluated left to right, unless noted.
| Precedence | Operators | Associativity |
|---|---|---|
| 1 | () |
— (grouping) |
| 2 | !, ~, - (unary) |
Right-to-left |
| 3 | *, /, % |
Left-to-right |
| 4 | +, - |
Left-to-right |
| 5 | <<, >> |
Left-to-right |
| 6 | <, <=, >, >= |
Left-to-right |
| 7 | ==, != |
Left-to-right |
| 8 | |, &, ^ |
Left-to-right |
| 9 | ||, && |
Left-to-right |
| 10 | ? : (ternary) |
Right-to-left |
| 11 | = (assignment) |
Right-to-left |
Use parentheses to override default precedence and clarify complex expressions.