Унарные операции
Быстрый старт в С++
Бесплатная небольшая книга, которую не надо читать полгода, но которая покажет вам, что такое С++ и как начать его изучение. А также поможет решить, надо ли вам это вообще. Кроме того, подписавшись на рассылку, вы будете получать от меня полезные материалы по С++, которые я периодически выпускаю... Подробнее... |
С арифметическими бинарными операциями мы сталкиваемся с первого класса школы, а многие и раньше. Это операции с двумя операндами, например:
1 + 2
То есть бинарная (ну или по-русски “двойная”, хотя это не совсем точный перевод) - это операция, в которой задействованы два операнда. Такими операциями являются почти все арифметические операции, такие как сложение, умножение, вычитание и деление.
Унарная операция, как можно догадаться - это операция с одним операндом (“уно” - один). Что же можно сделать с одним операндом? Ну не так уж много. Например, вот это:
-1
самая что ни на есть унарная операция. С помощью оператора - в данном случае мы из положительного числа делаем отрицательное. А вообще этот оператор меняет знак числа на противоположный. Например:
int x = -1; -x; //x = -1 x = -x; //x = 1
Обратите внимание, что во второй строке кода значение переменной х
не изменяется,
хотя мы применили унарный оператор, который вроде как должен поменять знак. Но этого не происходит,
потому что данный оператор меняет знак значения переменной, но не меняет само значение, и х
остаётся отрицательным. А вот если мы запишем результат унарной операции в переменную, то тогда уже знак поменяется на противоположный.
Кстати, в Паскале, например, вторая строчка будет вообще недопустима - компилятор выдаст ошибку.
Унарный оператор +
также имеется, но он особого смысла в нём нет, так как он ничего не делает с операндом.
В С++ и других подобных языках (например, в JavaScript)
есть ещё две унарные операции: ++
и ––
. Это операции инкремента (++
)
и декремента (––
). Операторы инкремента, в отличие от операторов +
и -
, могут находиться как перед переменной (префиксная форма), так и после неё (постфиксная форма).
Рассмотрим для примера оператор инкремента (декремент работает также).
int a, b, c; a = 10; b = ++a; //a = 11, b = 11 a = 10; c = a++; //a = 11, c = 10
Здесь наглядно показано отличие в работе между префиксной и постфиксной формой записи.
В префиксной форме сначала выполняется унарная операция, а потом возвращается новое значение
переменной (результат этой операции). Поэтому и а
и b
равны 11.
В постфиксной записи сначала возвращается значение переменной (старое значение),
и только потом выполняется унарная операция (в примере это операция инкремента).
Поэтому значение а
увеличивается и равно 11, а значение b
равно 10.
Вот так тоже делать можно:
c++;
То есть не обязательно присваивать результат операции какой-то переменной, так как эта операция записывает результат в переменную, к которой она применяется.
В Паскале тоже можно выполнять инкремент и декремент. Только там нет для этого унарных операций - там используются функции Inc и Dec соответственно. С одной стороны, это не так красиво и менее удобно. С другой - возможности этих функций шире, чем у унарных операций.
Зачем вообще придумали унарные операции и специальные функции для увеличения числа на единицу? Ведь можно было сделать просто так:
х = х + 1;
что привело бы к такому же результату.
Да, это так. Но разработчики языков заметили, что программисты увеличивают или уменьшают число на 1 намного чаще, чем на любую другую константу. Это используется для счётчиков, в циклах и т.п. А когда вы пишите программы из миллиона строк, то даже сэкономленные доли секунды, которые вы тратите на печатание одного символа, в итоге складываются в сэкономленные минуты, часы, дни…
Кроме того, большинство процессоров выполняют операцию инкремента быстрее, чем операцию сложения/вычитания. А во времена создания С++ мощность процессоров была невелика, и это тоже имело значение.
Ну что же. На этом всё. Подписывайтесь на новости, чтобы ничего не пропустить.
Вступить в группу "Основы программирования"
Подписаться на канал в РУТУБ Подписаться на Дзен-канал Подписаться на рассылки по программированию |
Все способы изучить С++
Начинающие программисты даже не догадываются о том, какой огромный пласт в этой области скрыт от их глаз, и чего многие из новичков не увидят никогда, потому что это тёмная сторона программирования - чистый исходный код системного уровня… Подробнее... |
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее... |