Найти в Дзене
Hello, World!

Операторы в языке Carbon

Арифметические Поддерживаются следующие арифметические операторы: Как знаковые, так и без знаковые целые числа поддерживают все арифметические операции. Хотя деление на ноль не определено. Числа с плавающей запятой поддерживают все арифметические операции, кроме модуляции. Пример: 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; Побитовый и битовый сдвиг Поддерживаемые операторы побитового и битового сдвига следующие: Пример: 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; Сравнение Вот поддерживаемые операторы сравнения: Пример: var a: bool = 5 == 5;
var b: bool =
Оглавление

Арифметические

Поддерживаются следующие арифметические операторы:

  • - : отрицательная величина ( -5 )
  • + : сложение ( 2 + 3 )
  • - : вычитание ( 3 - 2 )
  • * : умножение ( 2 * 3 )
  • / : деление ( 3 / 2 )
  • % : модуль ( 3 % 2 )

Как знаковые, так и без знаковые целые числа поддерживают все арифметические операции. Хотя деление на ноль не определено.

Числа с плавающей запятой поддерживают все арифметические операции, кроме модуляции.

Пример:

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;

Побитовый и битовый сдвиг

Поддерживаемые операторы побитового и битового сдвига следующие:

  • ^ : побитовое исключающее ИЛИ ( ^5 )
  • & : побитовое И ( 5 и 6 )
  • | : побитовое ИЛИ ( 5 | 6 )
  • ^ : побитовое XOR ( 5 ^ 6 )
  • << : сдвиг влево ( 5 << 2 )
  • >> : сдвиг вправо ( 5 >> 2 )

Пример:

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;

Сравнение

Вот поддерживаемые операторы сравнения:

  • == : равно ( 5 == 5 )
  • != : неравно ( 5 != 6 )
  • < : меньше ( 5 < 6 )
  • > : больше ( 6 > 5 )
  • <= : меньше или равно ( 5 <= 6 )
  • >= : больше или равно ( 5 >= 6 )

Пример:

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;

Преобразование

Оператор преобразования используется для преобразования одного вспомогательного типа данных в другой. Он представлен в виде ключевого слова as.

Пример:

var n: i32 = 56;
var f: f32 = n as f32;

Логические

Логические операторы используются для построения конечного условия из двух выражений, например (5 > 6) или (5 < 3). Следующие логические операторы поддерживаются в Carbon:

  • and - возвращает истину, если оба выражения истинны.
  • or - возвращает истину, если хотя бы одно из выражений истинно.
  • not - отрицание выражения.

Пример:

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

Индексирование

Индексирование используется для доступа к значениям из массива.

Пример:

var a: [i32;] = (1, 2, 3);
var b: i32 = a[1]; // b = 2

Вызов функции

Вызов функции - это тоже оператор.

Пример:

fn Add(a: i64, b: i64) -> i64 {
return a + b;
}

var sum: i64 = Add(2, 3); // sum = 5

Указатель

Другим оператором является указатель. Подробнее об указателях можно узнать здесь - Указатели в Carbon

Перемещение

Carbon позволяет типам определять, перемещаются ли они и как. Это может произойти при возврате значения из функции или при использовании оператора перемещения ~x. При этом x остается в несформированном состоянии и возвращается его старое значение.