Пожалуй, одно из самых простых и понятных действий в программировании - это присваивание. В большинстве языков оператор присваивания имеет вид =. Но бывает и по другому, например, в Паскале это :=. И лично мне это больше нравится, потому что использование оператора = в некоторых случаях может привести к труднонаходимым ошибкам. Но сегодня поговорим о С++, а там, как известно, присваивание выполняется именно с помощью =. Например:
х = 2;
Здесь мы переменной х присвоили число 2, после чего х хранит значение 2.
Однако разработчики языка заметили, что в программах очень часто встречаются выражения вида:
Переменная = Переменная # Число
Где # - это какая-то бинарная операция, например, сложение (+):
Переменная = Переменная + Число
Из этой записи следует, что в Переменную записывается сумма значения Переменной и Числа.
Поскольку одна и та же Переменная находится по обе стороны от знака операции, то разработчики языка С (если не ошибаюсь, то именно они были первыми) придумали сокращённую запись:
Переменная += Число
то есть решили просто к оператору присваивания добавить знак операции, и не писать имя переменной два раза. Это, конечно, экономит время при разработке, особенно если имена переменных достаточно длинные. Смысл данного примера такой: “Значение Переменной увеличено на Число”. Например:
x += 2;
это то же самое, что и
x = x + 2;
Но код при этом становится короче, хотя и менее понятен для новичка.
Действия, выполняемые такими операторами, ещё называют составное присваивание. И в С++ допустимы следующие составные операторы присваивания: +=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=.
Но здесь опять можно попасть в ловушку (С++ полон ловушек). Как вы думаете, чему будет равен х здесь:
int x = 100, y = 2;
x *= 100 + y;
Логично предположить, что здесь сохраняется приоритет операторов. То есть сначала выполняется умножение, а потом - сложение, и данное выражение эквивалентно следующему:
x = x * 100 + y;
Значит
x = 100 * 100 + 2 = 10002
Так?
Так, да не так. Потому что С++ был придуман специально для того, чтобы сводить с ума программистов, особенно начинающих )))
Поэтому выражение
x *= 100 + y;
на самом деле эквивалентно выражению
x = x * (100 + y);
а после этого х будет равен 10200.
Так что удачи вам в изучении С++ и ему подобных языков (а на основе С++ создано их довольно много).
И подписывайтесь на канал, чтобы ничего не пропустить…