logo
Posobie_Cpp

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

К любой комбинации основных типов переменных могут применяться арифметические операции: сложения, вычитания, умножения и деления, которые выполняются с помощью операторов: +, -, *, / (как и в других языках). Кроме того, над целыми числами и целочисленными переменными может выполняться операция % ‑ получения остатка:

k = 7%2 // результат равен 1

В языке С++ используется традиционные правила приоритета операций. Достойным отдельного упоминания являются инкремент и декремент ++ и --. Пример:

i++; //i увеличивается на 1. Равносильно i=i+1;

j--; //j уменьшается на 1. Можно написать и --j;

Между вариантами d++ и ++d есть некоторая разница. Сравните:

int d=1, e;

e=d++; //После этого оператора d=2, e=1

и

int d=1, e;

e=++d; //После этого оператора d=2, e=2

В первом случае сначала переменной e присваивается значение d, а затем d увеличивается на единицу, во втором случае наоборот, сначала увеличивается d, а затем выполняется оператор присваивания. То есть, действует правило: если оператор инкремента (декремента) расположен справа от переменной (префикс), то сначала выполняется присваивание, а затем увеличение (уменьшение) на единицу. А если оператор расположен слева (постфикс), то сначала выполняется оператор инкремента (декремента), а затем присваивание. Кроме операций инкремента и декремента в С++ используются и другие постфиксные и префиксные операции. Например, возможны такие выражения:

sum += i; // Равносильно sum=sum+i;

prod *= k; // Равносильно prod = prod*k;

Разумеется, такая форма записи возможна для всех арифметических операторов.

Как писал Бьёрн Страуструп, при присваивании и арифметических операциях C++ выполняет все осмысленные преобразования между основными типами, чтобы их можно было сочетать без ограничений:

double d = 1;

int i = 1;

d = d + i;

i = d + i;

Не слишком надеясь на неявное преобразование типов, пользуйтесь возможностью явного преобразования, которое для приведенных выше примеров может выглядеть так:

d = d + double(i);

Явное преобразование типов, выполненное к переменной типа char, позволяет получить ее номер в таблице символов ASCII. И наоборот, явно преобразуя целочисленную переменную к типу char, получаем соответствующий её номеру символ в ASCII – таблице:

#include <iostream.h>