We have a number of operators in Carbon language like – Arithmetic, Bitwise, BitShift, Comparison, Conversion, Logical, Indexing, function call, pointer, move etc.
Arithmetic
These arithmetic operators are supported –
-
-
: Negate ( -5 ) -
+
: Addition ( 2 + 3 ) -
-
: Subtraction ( 3 – 2 ) -
*
: Multiplication ( 2 * 3 ) -
/
: Division ( 3 / 2 ) -
%
: Modulo ( 3 % 2 )
Both signed and unsigned integers support all the arithmetic operations. Although division by zero is undefined.
Floating point numbers support all arithmetic operations except modulo.
Code Example –
var a: i32 = 5; var b: i32 = 3; // -5 var negation: i32 = -a; // 8 var sum: i32 = a + b; // 2 var difference: i32 = a - b; // 15 var product: i32 = a * b; // 1 var quotient: i32 = a / b; // 2 var remainder: i32 = a % b;
Bitwise & Bitshift
Supported bitwise & bitshift operators are –
-
^
: Complement ( ^5 ) -
&
: Bitwise AND ( 5 & 6 ) -
|
: Bitwise OR ( 5 | 6 ) -
^
: Bitwise XOR ( 5 ^ 6 ) -
<<
: Left Shift ( 5 << 2 ) -
>>
: Right Shift ( 5 >> 2 )
Code Example –
var a: u8 = 5; var b: u8 = 3; var c: i8 = -5; // 250 var complement: u8 = ^a; // 1 var bitwise_and: u8 = a & b; // 7 var bitwise_or: u8 = a | b; // 6 var bitwise_xor: u8 = a ^ b; // 40 var left_shift: u8 = a << b; // 2 var logical_right_shift: u8 = a >> 1; // -3 var arithmetic_right_shift: i8 = c >> 1;
Comparison
Here are the supported comparison operators –
-
==
: Equal ( 5 == 5 ) -
!=
: Not Equal ( 5 != 6 ) -
<
: Less Than ( 5 < 6 ) -
>
: Greater Than ( 6 > 5 ) -
<=
: Less than equal to ( 5 <= 6 ) -
>=
: Greater than equal to ( 5 >= 6 )
Code Example –
var a: bool = 5 == 5; var b: bool = 5 != 6; var c: bool = 5 < 6; var d: bool = 6 > 5; var e: bool = 5 <= 6; var f: bool = 5 >= 6;
Conversion
A conversion operator is used to convert one supporting data type to another. It is represented by as
.
Code Example –
var n: i32 = 56; var f: f32 = n as f32;
Logical
Logical operators are used to build final condition from two expressions like (5 > 6) or (5 < 3)
. These logical operators are supported in Carbon –
-
and
– Returns true when both expressions are true. -
or
– Returns true if at least one of the expressions is true. -
not
– To negate an expression.
Code Example –
var a: bool = (5 > 6) and (5 < 3) // a = False and False = False var b: bool = (5 < 6) or (5 < 3) // b = True or false = True var c: bool = not a; // c = not False = True
Indexing
Indexing is used to access values from array.
Code Example –
var a: [i32;] = (1, 2, 3); var b: i32 = a[1]; // b = 2
Function Call
Function call is an operator too.
Code Example –
fn Add(a: i64, b: i64) -> i64 { return a + b; } var sum: i64 = Add(2, 3); // sum = 5
Pointer
Another operator is pointer. Learn more about pointer here – Pointers in Carbon
Move
Carbon will allow types to define if and how they are moved. This can happen when returning a value from a function or by using the move operator ~x
. This leaves x
in an unformed state and returns its old value.
Conclusion
In this article we saw all the operators which are supported by Carbon Language. In the next post we will learn about conditions, loops and functions.
Carbon Language Series
- Introduction to Carbon Language.
- How to define variables in Carbon.
- Primitive Types – Bool, Int, Float, String
- Tuple in Carbon
- Struct in Carbon
- Pointers in Carbon
- Operators in Carbon Language
- Conditions & Control Flow in Carbon
- Ternary Operator (if expression) in Carbon
- Switch conditional in Carbon using Match
- Loops in Carbon
- Functions in Carbon