Раздел: Статьи / С/С++ /

Унарные операции

Быстрый старт в С++ Быстрый старт в С++

Бесплатная небольшая книга, которую не надо читать полгода, но которая покажет вам, что такое С++ и как начать его изучение. А также поможет решить, надо ли вам это вообще. Кроме того, подписавшись на рассылку, вы будете получать от меня полезные материалы по С++, которые я периодически выпускаю... Подробнее...

С арифметическими бинарными операциями мы сталкиваемся с первого класса школы, а многие и раньше. Это операции с двумя операндами, например:

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), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика