Арифметические операции предназначены для выполнения простейших вычислений. Большинство из них поддерживает различные типы входных данных.
ВНИМАНИЕ! При выполнении операций сложения и умножения результат может переходить через максимально возможное значение для используемого типа данных. Аналогично, при выполнении вычитания и деления результат может переходить через минимально возможное значение. В базовой реализации Ci проверка таких переходов не производится, что может быть источником ошибок и неожиданного поведения Ci-программы.
+
Форматы вызова:
(<parameter0> + <parameter1> [<parameter2>...<parameter31>])
(+ <parameter0> <parameter1> [<parameter2>...<parameter31>])
тип возвращаемого значения определяется типом первого параметра, число параметров от 2 до максимального;
первый параметр в базовой реализации может быть типа int, uint и float (данные другого типа вызывают ошибку при компиляции программы), допустим любой операнд, массив не допустим;
второй и последующие параметры такого же типа, как первый, допустимы любые операнды, массивы не допустимы;
назначение операции: вычисление арифметической суммы всех операндов, принимает параметрами и возвращает результат одного и того же типа, примеры использования:
puts (a + 10);
puts (100.1 + (PI / 2));
x = (+ a b c d -12 (a * b));
последнее эквивалентно выражению x = a + b + c + d - 12 + a*b
-
Форматы вызова:
(<parameter0> - <parameter1>)
(- <parameter0> <parameter1>)
(- <parameter0>)
тип возвращаемого значения определяется типом первого параметра, число параметров от 1 до 2;
первый параметр в базовой реализации может быть типа int, uint и float (данные другого типа вызывают ошибку при компиляции программы), допустим любой операнд, массив не допустим;
второй параметр такого же типа, как первый, допустимы любые операнды, массивы не допустимы;
назначение операции: при использовании с двумя параметрам возвращает значение первого операнда после вычитания из него значения второго операнда, принимает параметрами и возвращает результат одного и того же типа, примеры использования:
puts (a - 10);
puts (100.1 - 3.14);
puts ((a - b) - c);
при использовании с одним параметром возвращает значение этого параметра с изменением знака на противоположный, например:
int i -10, a 3;
puts ( - ( i + a) ) ( - a );
напечатает: 7 -3
+= =+
Форматы вызова:
<parameter0> += <parameter1>;
<parameter0> =+ <parameter1>;
(<parameter0> += <parameter1>)
(<parameter0> =+ <parameter1>)
+= <parameter0> <parameter1>;
=+ <parameter0> <parameter1>;
(+= <parameter0> <parameter1>)
(=+ <parameter0> <parameter1>)
тип возвращаемого значения определяется типом первого параметра, число параметров 2, возвращаемое значение можно игнорировать;
первый параметр типа int, uint, float (данные другого типа вызывают ошибку при выполнении программы), допустима только переменная, массив не допустим;
второй параметр такого же типа, как первый, допустим любой операнд, массив не допустим;
назначение операции: выполняет сложение операндов, записывает результат в первый операнд и может вернуть его значение, оба вида записи выполняются одинаково. Примеры:
a += 12;
эквивалентно a = (a + 12)
a = (b =+ c);
эквивалентно b = (b + c); a = b
-= =-
Форматы вызова:
<parameter0> -= <parameter1>;
<parameter0> =- <parameter1>;
(<parameter0> -= <parameter1>)
(<parameter0> =- <parameter1>)
-= <parameter0> <parameter1>;
=- <parameter0> <parameter1>;
(-= <parameter0> <parameter1>)
(=- <parameter0> <parameter1>)
тип возвращаемого значения определяется типом первого параметра, число параметров 2, возвращаемое значение можно игнорировать;
первый параметр типа int, uint, float (данные другого типа вызывают ошибку при выполнении программы), допустима только переменная, массив не допустим;
второй параметр такого же типа, как первый, допустим любой операнд, массив не допустим;
назначение операции: выполняет вычитание значения второго операнда из первого, записывает результат в первый операнд и может вернуть его значение, оба вида записи выполняются одинаково. Примеры:
a -= 12;
эквивалентно a = (a - 12)
a = (b =- c);
эквивалентно b = (b - c); a = b
++
Форматы вызова:
++ <parameter0>;
<parameter0> ++;
(++ <parameter0>)
(<parameter0> ++)
тип возвращаемого значения определяется типом параметра, параметр один;
параметр может быть типа int, uint, float (данные другого типа вызывают ошибку при выполнении программы), допустима только переменная, массив не допустим;
назначение операции: арифметический инкремент, выполняет увеличение параметра на 1 (вещественное число увеличивается на 1.0), записывает результат в переменную, которая передана параметром, может возвращать результат инкремента, при этом существенно, в какой форме записана операция, в инфиксной или в префиксной:
a = ( ++ i );
выполняется в следующем порядке:
i увеличивается на 1;
результат присваивается временной переменной;
временная переменная передается вторым параметром операции присваивания;
значение временной переменой копируется в a;
a = ( i ++ );
выполняется в следующем порядке:
i присваивается временной переменной;
i увеличивается на 1;
временная переменная передается вторым параметром операции присваивания;
значение временной переменой копируется в a,
то есть, операция выполняется аналогично тому, как это происходит в программе на языке C – переменная инкрементируется всегда, но в зависимости от того, находится ++ слева или справа от нее, возвращаемое значение различное – либо это значение инкрементированной переменной, либо ее значение до инкремента.
--
Форматы вызова:
-- <parameter0>;
<parameter0> --;
(-- <parameter0>)
(<parameter0> --)
тип возвращаемого значения определяется типом параметра, параметр один;
параметр может быть типа int, uint, float (данные другого типа вызывают ошибку при выполнении программы), допустима только переменная, массив не допустим;
назначение операции: арифметический декремент, выполняет уменьшение числа на 1 (вещественное число уменьшается на 1.0) записывает результат в переменную, которая передана параметром, может возвращать результат декремента, при этом существенно, в какой форме записана операция, в инфиксной или в префиксной:
a = ( -- i );
выполняется в следующем порядке:
i уменьшается на 1;
результат присваивается временной переменной;
временная переменная передается вторым параметром операции присваивания.
a = ( i -- );
выполняется в следующем порядке:
i присваивается временной переменной;
i уменьшается на 1;
временная переменная передается вторым параметром операции присваивания,
то есть, операция выполняется аналогично тому, как это происходит в программе на языке C – переменная декрементируется всегда, но в зависимости от того, находится ++ слева или справа от нее, возвращаемое значение различное – либо это значение декрементированной переменной, либо ее значение до декремента.
*
Форматы вызова:
(<parameter0> * <parameter1> [<parameter2>...<parameter31>])
(* <parameter0> <parameter1> [<parameter2>...<parameter31>])
тип возвращаемого значения определяется типом первого параметра, число параметров 2;
первый параметр в базовой реализации может быть типа int, uint и float (данные другого типа вызывают ошибку при компиляции программы), допустим любой операнд, массив не допустим;
второй и последующие параметры такого же типа, как первый, допустимы любые операнды, массивы не допустимы;
назначение операции: арифметическое произведение всех параметров, возвращает результат произведения, допустима инфиксная запись, примеры:
puts (a * 10);
puts (100.1 * (PI / 2));
x = (* a b c d -12 (a + b));
последнее вычисляет выражение x = a * b * c * d * -12 * (a + b)
/
Форматы вызова:
(<parameter0> / <parameter1>)
(/ <parameter0> <parameter1>)
тип возвращаемого значения определяется типом первого параметра, число параметров 2;
первый параметр в базовой реализации может быть типа int, uint и float (данные другого типа вызывают ошибку при компиляции программы), допустим любой операнд, массив не допустим;
второй параметр такого же типа, как первый, любые операнды, массивы не допустимы, если значение второго параметра равно 0, программа будет прервана с сообщением об ошибке;
назначение операции: возвращает результат деления первого операнда на второй, допустима инфиксная запись, пример использования:
puts (a / 10);
puts (100.1 / 3.14);
puts ((a / b) / c);
%
Форматы вызова:
(<parameter0> % <parameter1>)
(% <parameter0> <parameter1>)
тип возвращаемого значения определяется типом первого параметра, число параметров 2;
первый параметр в базовой реализации может быть типа int, uint и float (данные другого типа вызывают ошибку при компиляции программы), допустим любой операнд, массив не допустим;
второй параметр такого же типа, как первый, любые операнды, массивы не допустимы, если значение второго параметра равно 0, программа будет прервана с сообщением об ошибке;
назначение операции: выполняет арифметическое деление делимого на делитель и возвращает остаток от деления такого же типа, как тип первого параметра, допустима инфиксная запись.
Если производится получение остатка при делении вещественных чисел, то вычисляется он следующим образом: остаток равен дополнению до величины делимого произведения делителя и целого числа, такого, что это произведение меньше делимого, но максимально близко к нему:
puts (14.1 % 3.2);
выведет 1.300000, вычисляется это следующим образом: 14.1 / 3.2 = 4.40625; округление до целого вниз 4.40625 = 4; 14.1 - 3.2 * 4 = 1.3
Примеры правильного использования:
puts (a % 10);
puts (100.1 % 3.14);
puts ((a % b) % c);
*= =*
Форматы вызова:
<parameter0> *= <parameter1>;
<parameter0> =* <parameter1>;
(<parameter0> *= <parameter1>)
(<parameter0> =* <parameter1>)
*= <parameter0> <parameter1>;
=* <parameter0> <parameter1>;
(*= <parameter0> <parameter1>)
(=* <parameter0> <parameter1>)
тип возвращаемого значения определяется типом первого параметра, число параметров 2, возвращаемое значение можно игнорировать;
первый параметр типа int, uint, float (данные другого типа вызывают ошибку при выполнении программы), допустима только переменная, массив не допустим;
второй параметр такого же типа, как первый, допустим любой операнд, массив не допустим;
назначение операции: выполняет умножение значения второго операнда на первый, записывает результат в первый операнд и может вернуть его значение, допустима инфиксная запись, оба вида записи выполняются одинаково, примеры:
a *= 12;
эквивалентно a = (a * 12)
a = (b =* c);
эквивалентно
b = (b * c);
a = b
/= =/
Форматы вызова:
<parameter0> /= <parameter1>;
<parameter0> =/ <parameter1>;
(<parameter0> /= <parameter1>)
(<parameter0> =/ <parameter1>)
/= <parameter0> <parameter1>;
=/ <parameter0> <parameter1>;
(/= <parameter0> <parameter1>)
(=/ <parameter0> <parameter1>)
тип возвращаемого значения определяется типом первого параметра, число параметров 2, возвращаемое значение можно игнорировать;
первый параметр типа int, uint, float (данные другого типа вызывают ошибку при выполнении программы), допустима только переменная, массив не допустим;
второй параметр такого же типа, как первый, допустим любой операнд, массив не допустим, если значение второго параметра равно 0, программа будет прервана с сообщением об ошибке;
назначение операции: выполняет деление значения второго операнда на первый, записывает результат в первый операнд и может вернуть его значение, допустима инфиксная запись, оба вида записи выполняются одинаково. Примеры:
a /= 12;
эквивалентно a = (a / 12)
a = (b =/ c);
эквивалентно
b = (b / c);
a = b
abs
Формат вызова:
(abs <parameter0>)
тип возвращаемого значения определяется типом первого параметра, число параметров 1;
параметр типа int, uint, float (данные другого типа вызывают ошибку при выполнении программы), допустима только переменная, массив не допустим;
назначение операции: возвращает абсолютное (без учета знака) значение параметра, беззнаковые целые возвращаются без изменений, пример:
a = (abs -100);
a = (abs 100); `в обоих случаях a получит значение 100`