Операторы и циклы

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

Математические операторы

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

  • + — сложение:
std::cout << 10 + 15 << std::endl;    // 25
  • - — вычитание:
std::cout << 35 - 15 << std::endl;    // 20
  • - — унарный минус:
int x = 10;
std::cout << -x << std::endl;         // -10
  • * — умножение:
std::cout << 25 * 2 << std::endl;     // 50
  • / — деление. Если производится деление целых чисел, то остаток отбрасывается и возвращается целое число. Деление вещественных чисел производится классическим способом. Если в выражении участвуют вещественное и целое числа, то целое число автоматически преобразуется в вещественное. Пример:
std::cout << 10 / 3 << std::endl;               // 3
std::cout << 10.0 / 3.0 << std::endl;           // 3.33333
std::cout << 10.0 / 3 << std::endl;             // 3.33333
std::cout << static_cast<double>(10) / 3
          << std::endl;                         // 3.33333

Целочисленное деление на 0 приведет к неопределенности. Деление вещественного числа на 0 приведет к значению плюс или минус INFINITY (бесконечность), а деление вещественного числа 0.0 на 0.0 — к значению NAN (нет числа):

std::cout << 10.0 / 0.0 << std::endl;           // inf
std::cout << -10.0 / 0.0 << std::endl;          // -inf
std::cout << 0.0 / 0.0 << std::endl;            // nan
// #include <cmath> или #include <math.h>
std::cout << INFINITY << std::endl;             // inf
std::cout << -INFINITY << std::endl;            // -inf
std::cout << NAN << std::endl;                  // nan
std::cout << NAN + 1 << std::endl;              // nan
std::cout << 0 * INFINITY << std::endl;         // nan
std::cout << INFINITY / INFINITY << std::endl;  // nan
std::cout << -INFINITY + INFINITY << std::endl; // nan
  • % — остаток от деления. Обратите внимание на то, что этот оператор нельзя применять к вещественным числам. Пример:
std::cout << 10 % 2 << std::endl;     // 0 (10 - 10 / 2 * 2)
std::cout << 10 % 3 << std::endl;     // 1 (10 - 10 / 3 * 3)
std::cout << 10 % 4 << std::endl;     // 2 (10 - 10 / 4 * 4)
std::cout << 10 % 6 << std::endl;     // 4 (10 - 10 / 6 * 6)
  • ++ — оператор инкремента. Увеличивает значение переменной на 1:
int x = 10;
++x;                         // Эквивалентно x = x + 1;
std::cout << x << std::endl; // 11
  • -- — оператор декремента. Уменьшает значение переменной на 1:
int x = 10;
--x;                         // Эквивалентно x = x - 1;
std::cout << x << std::endl; // 9

Операторы инкремента и декремента могут использоваться в постфиксной или префиксной формах:

x++; x--; // Постфиксная форма
++x; --x; // Префиксная форма

При постфиксной форме (x++) возвращается значение переменной перед операцией, а при префиксной форме (++x) — вначале производится операция и только потом возвращается значение. Продемонстрируем это на примере (листинг 4.1).

Листинг 4.1. Постфиксная и префиксная форма

#include <iostream>
#include <clocale>

int main() {
   std::setlocale(LC_ALL, "Russian_Russia.1251");
   int x = 0, y = 0;
   x = 5;
   y = x++; // y = 5, x = 6
   std::cout << "Постфиксная форма (y = x++;):" << std::endl
             << "y = " << y << std::endl
             << "x = " << x << std::endl;
   x = 5;
   y = ++x; // y = 6, x = 6
   std::cout << "Префиксная форма (y = ++x;):" << std::endl
             << "y = " << y << std::endl
             << "x = " << x << std::endl;
   return 0;
}

В итоге получим следующий результат:

Постфиксная форма (y = x++;):
y = 5
x = 6
Префиксная форма (y = ++x;):
y = 6
x = 6

Если операторы инкремента и декремента используются в сложных выражениях, то понять, каким будет результат выполнения выражения становится сложно. Например, каким будет значение переменной y после выполнения этих инструкций?

int x = 5, y = 0;
y = ++x + ++x;

Чтобы облегчить жизнь себе и всем другим программистам, которые будут разбираться в программе, операторы инкремента и декремента лучше использовать отдельно от других операторов.

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов