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


Арифметические операции производятся над числами. Значения, которые участвуют в операции, называются операндами. В языке программирования C++ арифметические операции бинарными (производятся над двумя операндами) и унарными (выполняются над одним операндом). К бинарным операциям относят следующие:

+

Операция сложения возвращает сумму двух чисел:

int a = 10;
int b = 7;
int c = a + b; // 17
int d = 4 + b; // 11
-

Операция вычитания возвращает разность двух чисел:

int a = 10;
int b = 7;
int c = a - b; // 3
int d = 41 - b; // 34
*

Операция умножения возвращает произведение двух чисел:

int a = 10;
int b = 7;
int c = a * b; // 70
int d = b * 5; // 35
/

Операция деления возвращает частное двух чисел:

int a = 20;
int b = 5;
int c = a / b; // 4
double d = 22.5 / 4.5; // 5
При делении стоит быть внимательным, так как если в операции участвуют два целых числа, то результат деления будет округляться до целого числа, даже если результат присваивается переменной float или double:

double k = 10 / 4; // 2
std::cout << k;
Чтобы результат представлял числос плавающей точкой, один из операндов также должен представлять число с плавающей точкой:

double k = 10.0 / 4; // 2.5
std::cout << k;
%

Операция получения остатка от целочисленного деления:

int a = 33;
int b = 5;
int c = a % b; // 3
int d = 22 % 4; // 2 (22 - 4*5 = 2)
Также есть две унарные арифметические операции, которые производятся над одним числом: ++ (инкремент) и -- (декремент). Каждая из операций имеет две разновидности: префиксная и постфиксная:

Префиксный инкремент.

Увеличивает значение переменной на единицу и полученный результат используется как значение выражения ++x

int a = 8;
int b = ++a;
std::cout << a << "\n"; // 9
std::cout << b << "\n"; // 9
Постфиксный инкремент.

Увеличивает значение переменной на единицу, но значением выражения x++ будет то, которое было до увеличения на единицу

int a = 8;
int b = a++;
std::cout << a << "\n"; // 9
std::cout << b << "\n"; // 8
Префиксный декремент.

Уменьшает значение переменной на единицу, и полученное значение используется как значение выражения --x

int a = 8;
int b = --a;
std::cout << a << "\n"; // 7
std::cout << b << "\n"; // 7
Постфиксный декремент.

Уменьшает значение переменной на единицу, но значением выражения x-- будет то, которое было до уменьшения на единицу

int a = 8;
int b = a--;
std::cout << a << "\n"; // 7
std::cout << b << "\n"; // 8
Арифметические операции вычисляются слева направо. Одни операции имеют больший приоритет чем другие и поэтому выполняются вначале. Операции в порядке уменьшения приоритета:

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

int a = 8;
int b = 7;
int c = a + 5 * ++b; // 48
std::cout << c;
Хотя операции выполняются слева направо, но вначале будет выполняться операция инкремента ++b, которая увеличит значение переменной b и возвратит его в качестве результата, так как эта операция имеет больший приоритет. Затем выполняется умножение 5 * ++b, и только в последнюю очередь выполняется сложение a + 5 * ++b

Скобки позволяют переопределить порядок вычислений. Например:

int a = 8;
int b = 7;
int c = (a + 5) * ++b; // 104
std::cout << c;
Несмотря на то, что операция сложения имеет меньший приоритет, но вначале будет выполняться именно сложение, а не умножение, так как операция сложения заключена в скобки.