Шаг 11.
Арифметические операции

    Начиная с этого шага мы начинаем знакомиться с основными операциями, используемыми в C++.

    К арифметическим операциям относятся:

    В языке C++ принято правило: если делимое и делитель имеют тип int, то деление производится нацело, то есть дробная часть результата отбрасывается. Как обычно, в выражениях операции умножения, деления и нахождения остатка выполняются раньше сложения и вычитания. Для изменения порядка действий используйте скобки.

    Пример 1. Что напечатает следующая программа?

   #include<iostream.h>
   main ()
   {
      int x;
      x = -3+4*5-6;  cout<<x<<" ";  /* Операция 1 */
      x = 3+4%5-6;   cout<<x<<" ";  /* Операция 2 */
      x = -3*4%-6/5; cout<<x<<" ";  /* Операция 3 */
      x = (7+6)%5/2; cout<<x<<" ";  /* Операция 4 */
   }
Текст этой программы можно взять здесь.

    Результат работы программы:

   11  1  0  1

    Комментарии. Воспользуемся таблицей приоритетов операций, двигаясь от высших к низшим. Мы будем пользоваться скобками, чтобы показать порядок применения операций к операндам.

    Присваивание x = -3+4*5-6;. Наивысший приоритет имеет унарная операция "-": x=(-3)+4*5-6. Следующий по порядку приоритет имеет операция "*": x=(-3)+(4*5)-6. Обе операции "+" и "-" имеют одинаковый приоритет, выполняются справа налево: сначала "+", потом "-": x=(((-3)+(4*5))-6). Внизу таблицы приоритетов находится операция "=". Теперь, когда для каждой операции определены операнды, можно вычислять значение выражения: (x=(((-3)+(4*5))-6)).
    Для этого выражения вычисление начинается с самого внутреннего подвыражения: (x=((-3+(4*5))-6)).
    Заменяем каждое подвыражение на его результат:

   (x=((-3+20)-6))
   (x=(17-6))
   (x=11)

Значение выражения, содержащего операцию присваивания, есть значение правой части выражения, приведенное к типу левой части присваивания, т.е. целое число 11.


    Присваивание x = 3+4%5-6;. Вследствие приоритета операций и порядка их выполнения получаем такой результат: (x=((3+(4%5))-6)).
    Опять вычисление выражения начинается "изнутри":

   (x=((3+4)-6)
   (x=(7-6))
   (x=1)
   1


    Присваивание x = -3*4%-6/5;. Это выражение сложнее предыдущего, но строгое следование правилу приоритетов операций и порядку их выполнения позволяет "распутать" и его: x=(-3)*4%(-6)/5.
    Операции "*", "%", "/" имеют один и тот же приоритет и выполняются слева направо:

   x=((-3)*4)%(-6)/5
   x=((-3)*4)%(-6)/5
   x=(((-3)*4)%(-6))/5
   x=((((-3)*4)%(-6))/5)
   (x=((((-3)*4)%(-6))/5))
Начинаем изнутри вычислять выражение:
   (x=(((-3*4)%-6)/5))
   (x=((-12%-6)/5))
   (x=(0/5))
   (x=0)
   0


    Присваивание x = (7+6)%5/2;. Мы не всегда жестко связаны с заранее известными приоритетами операций; если порядок выполнения нужно изменить или просто "прояснить" структуру выражения, можно использовать скобки.
    Вначале вычисляются подвыражения в скобках. Далее, как и раньше, следуем правилу приоритетов операций и порядку их выполнения:

   x=((7+6)%5)/2
   x=(((7+6)%5)/2)
   (x=(((7+6)%5)/2))
Начинаем изнутри вычислять выражение:
   (x=(13%5)/2)
   (x=(3/2))

    Так как при операциях с целыми числами дробная часть операнда отбрасывается, то на следующем шаге вычислений получаем выражение (x=1), значением которого является 1.

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


Предыдущий шаг Содержание Следующий шаг