Обзор
В языке Carbon есть практически те же операторы, что и в C++. Поэтому, если вы знакомы с ними, вы можете пропустить эту часть.
Как всегда, читатель может найти исходные коды частей по этой ссылке на github.
Арифметические операторы
Отрицание: —
Оператор сложения: +
Оператор вычитания: —
Оператор умножения: *
Оператор деления: /
Оператор модуляции: %
Давайте рассмотрим эти операторы вкратце:
var myVariable: i32 = 3;
myVariable = -myVariable;
Print("Negation of 3 is: {0}", myVariable);
Print("Sum of 6 and 3 is: {0}",6 + 3);
Print("Difference of 6 and 3 is: {0}",6 - 3);
Print("Multiplication of 6 and 3 is: {0}",6 * 3);
Print("6 divided by 3 is: {0}",6/3);
Print("Mod3 of 5 is: {0}",5 % 3);
Преобразование в Carbon
Чтобы изменить тип переменной, мы используем преобразование. Carbon поддерживает операции преобразования с помощью ключевого слова as.
var myConvertable: i32 = 3;
var convertedVersion: f32 = myConvertable as f32;
Условные операторы
Логические операторы практически одинаковы. Поскольку мы еще не изучали условные операторы, они также бесполезны для нас сейчас 🙂
-
Равно ==
-
Не равно !=
-
Больше чем >
-
Больше или равно >=
-
Меньше чем <
-
Меньше чем или равно <=
Приведем несколько примеров таких операторов:
var s: bool = (22 == 22);
var a: bool = (8 > 2022);
var d: bool = (8 >= 2022);
var i: bool = (8 < 2022);
Логические операторы
Логические операторы аналогичны операторам python:
-
and ключевое слово для операции and (вместо &&)
-
or — ключевое слово для операции or (вместо ||)
-
not ключевое слово для логического дополнения (вместо !)
var g: bool = s and a;
var l: bool = d or i;
var b: bool = not i;
Побитовые операторы
-
^ для дополнения (перед значением)
-
& для побитового И (между значениями)
-
| для побитового ИЛИ (между значениями)
-
<< для сдвига влево (между значениями)
-
для сдвига вправо (между значениями)
-
^ для XOR (между значениями)
Давайте рассмотрим несколько примеров для лучшего понимания:
Мы будем использовать 32-битные целые числа, и чтобы лучше видеть эффекты, их значения будут приведены в виде битов.
var first: i32 = 7; // 00000000 00000000 00000000 00000111
var second: i32 = 2; // 00000000 00000000 00000000 00000010
Давайте возьмем дополнение первой переменной вручную. Чтобы получить дополнение, мы, по сути, меняем 0 на 1 и 1 на 0:
11111111 11111111 11111111 11111000
Поскольку это целое знаковое число, основанное на 2, чтобы найти его значение, мы должны взять дополнение 1 и прибавить к нему 1. Однако мы уже выполнили дополнение 1, поэтому исходное значение равно дополнению 1. Если прибавить к нему 1, то получится 8. Значит, результат должен быть -8.
Давайте проверим это с помощью нашего кода:
Операция довольно проста. Мы смотрим на 1, которая находится в том же месте. Тогда должно получиться:
00000000 00000000 00000000 00000010
Проверим это с помощью нашего кода:
И продолжим с другими операторами:
Print("first or second: {0}", first | second); // Output: 7
Print("first xor second: {0}", first ^ second); // Output: 5
Print("first left shift by 1: {0}", first << 1); // Output: 14
Print("first right shift by 1: {0}", first >> 1); // Output: 3
Заключение
Несмотря на то, что это не все операторы в Carbon, можно заметить, что они схожи с другими языками программирования. Однако, несмотря на то, что Carbon является преемником C++, есть некоторые отличия.