Перевести страницу

Создание приложений для науки и производства ещё не было таким простым

Арифметические операции

Арифметические операции предназначены для выполнения простейших вычислений. Большинство из них поддерживает различные типы входных данных.


ВНИМАНИЕ! При выполнении операций сложения и умножения результат может переходить через максимально возможное значение для используемого типа данных. Аналогично, при выполнении вычитания и деления результат может переходить через минимально возможное значение. В базовой реализации 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`