- Арифметика в программировании
- Операторы
- Коммутативная операция
- Композиция операций
- Приоритет операций
На базовом уровне компьютеры оперируют только числами. Для сложения двух чисел в математике мы пишем, например, 3 + 4
. В программировании — то же самое. В этом уроке разберем, как проводить арифметические операции в коде.
Арифметика в программировании
Рассмотрим пример программы, которая складывает два числа:
<?php
// Не забываем точку с запятой в конце, так как каждая строчка в коде — инструкция
3 + 4;
Арифметика в программировании практически не отличается от школьной. Инструкция 3 + 4;
заставит интерпретатор сложить числа и узнать результат. Эта программа будет работать, но в ней нет смысла, потому что по сути мы не даем команду интерпретатору, мы просто говорим ему «смотри, сумма трех и четырех».
В реальной работе недостаточно сообщать интерпретатору о математическом выражении. Например, при создании интернет-магазина недостаточно просить интерпретатор посчитать стоимость товаров в корзине. В этом случае нужно просить посчитать стоимость и показать цену покупателю.
Нам нужно попросить интерпретатор сложить 3 + 4
и дать команду сделать что-то с результатом. Например, вывести его на экран:
<?php
// Снова не забываем точку с запятой в конце строчки
print_r(3 + 4); // => 7
Кроме сложения доступны следующие операции:
*
— умножение/
— деление-
— вычитание%
— остаток от деления**
— возведение в степень
Эти знаки операций называют операторами. Поговорим о них подробнее.
Операторы
Знак операции, например, +
, называют оператором. Операторы обычно представлены одним или несколькими символами, реже — словом. Обычно они соответствуют математическим операциям.
Операторы выполняют операции над определенными значениями, которые называются операндами.
Рассмотрим пример:
<?php
print_r(8 + 2);
Здесь +
— это оператор, а числа 8
и 2
— это операнды.
Операции, которые требуют наличия двух операндов, называются бинарными. В случае сложения у нас есть два операнда: один слева от знака +
, другой — справа. Если пропустить хотя бы один операнд, например, 3 + ;
, то программа завершится с синтаксической ошибкой.
Еще операции бывают унарными — с одним операндом, и тернарными — с тремя операндами. Причем операторы могут выглядеть одинаково, но обозначать разные операции.
Символы +
и -
используются не только как операторы. Когда речь идет про отрицательные числа, то знак минуса становится частью числа:
<?php
print_r(-3); // => -3
Выше пример применения унарной операции к числу 3
. Оператор -
перед тройкой говорит интерпретатору взять число 3
и найти противоположное, то есть -3
. Это может сбить с толку, потому что -3
— это одновременно и число, и оператор с операндом. Но у языков программирования такая структура:
<?php
// То же самое, что и 4 - 3
print_r(4 + -3); // => 1
То же самое касается и плюса:
<?php
print_r(+3); // => 3
print_r(1 + +3); // => 4
Коммутативная операция
В программировании используется базовый закон арифметики: от перемены мест слагаемых сумма не меняется. Он называется коммутативным законом. Если поменять местами операнды в бинарной операции, и получится тот же результат, такая операция будет коммутативной. Получается, что сложение — коммутативная операция: 3 + 2 = 2 + 3
.
Вычитание не будет являться коммутативной операцией: 2 - 3 ≠ 3 - 2
. В программировании этот закон тоже работает. Большинство операций, с которыми мы будем сталкиваться в реальной жизни, не являются коммутативными. Поэтому всегда нужно обращать внимание на порядок того, с чем работаем.
Композиция операций
Разберем пример композиции операций:
<?php
print_r(2 * 4 * 5 * 10); // 2 * 4 * 5 * 10 = 8 * 5 * 10 = 40 * 10 => 400
Операции можно соединять друг с другом. Это дает возможность вычислять более сложные составные выражения. Такое свойство операций называется композицией.
Композиция арифметических операций в программировании аналогична композиции из школьной программы. Она распространяется на все операции, а не только на арифметические.
Чтобы представить, как происходят вычисления внутри интерпретатора, разберем пример: 2 * 4 * 5 * 10
.
- Сначала вычисляется
2 * 4
и получается выражение8 * 5 * 10
- Затем
8 * 5
. В итоге имеем40 * 10
- В конце происходит последнее умножение, и получается результат
400
Приоритет операций
В школьной математике есть понятие «приоритет операции». Приоритет определяет, в какой последовательности должны выполняться операции.
Допустим, нам нужно вычислить такое выражение: 2 + 2 * 2
:
<?php
print_r(2 + 2 * 2); // => 6
Интерпретатор производит арифметические вычисления в правильном порядке: сначала деление и умножение, потом сложение и вычитание, а приоритет возведения в степень выше всех остальных арифметических операций: 2 ** 3 * 2
вычислится в 16
.
Иногда вычисления должны происходить в другом порядке. В этом случае приоритет задают круглыми скобками, например: (2 + 2) * 2
. Скобки можно ставить вокруг любой операции. Они могут вкладываться друг в друга сколько угодно раз. Вот пара примеров:
<?php
print_r(3 ** (4 - 2)); // => 9
print_r(7 * 3 + (4 / 2) - (8 + (2 - 1))); // => 14
В этом случае главное закрывать скобки в правильном порядке. Это часто становится причиной ошибок не только у новичков, но и у опытных программистов. Для удобства можно сразу ставить открывающую и закрывающую скобки, а потом писать внутреннюю часть.
Сейчас большинство редакторов кода делают это автоматически. Например, мы ставим открывающую скобку, а он автоматически ставит закрывающую. Это касается и других парных символов, например, кавычек. О них — в будущих уроках.
Иногда выражение сложно воспринимать визуально. Тогда можно расставить скобки, не повлияв на приоритет. Код пишется для людей, а машины будут только исполнять его. Для машин код — или корректный, или не корректный. Для них нет «более» понятного или «менее» понятного кода. Явная расстановка приоритетов упрощает чтение кода другими разработчиками.
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты