Программирование >>  Аргументация конструирования 

1 ... 7 8 9 [ 10 ] 11 12 13 ... 108


Выражения бывают как сложными, так и крайне простыми. Необычной особенностью C++ является то, что он понимает под выражением любой законченный оператор. Поэтому корректным оператором является, например,

Он тоже представляет собой выражение, потому что его значение 1, а тип int. В операторе z = х *у + w;

можно выделить пять выражений:

х * у + 1л-х * у X У

Необычный аспект C++ состоит в том, что выражение само по себе является завершенной инструкцией, т.е. упомянутое выражение; - завершенная инструкция C + + .

Gnftec/еление noftsujfca опфсищй

Все операторы выполняют определенные функции. Чтобы установить порядок выполнения различных операторов, им назначены приоритеты. Рассмотрим выражение

int var =2*3+1;

Если сложение выполнить перед умножением, то значением выражения будет 2*4 = 8. Если сперва выполнить умножение, то получим значение 6+1 = 7.

Приоритеты операций определяют порядок выполнения вычислений. Из табл. 3.1

видно, что приоритет операции умножения выше, чем сложения, т.е. результат все же равен 7 {приоритеты используются и в арифметике, и C + + следует именно им).

А что происходит, когда в одном выражении используется два оператора с одинаковым приоритетом?

int var =8/4/2;

Как в этом случае следует поступить: сначала 8 поделить на 2 или 2 на 4? Если в одном выражении присутствуют операции с одинаковыми приоритетами, они выполняются слева направо (то же правило применяется и в арифметике). Поэтому в предыдущем примере сперва делим 8 на 4, получая 2, а затем делим его на 2, получая ответ - 1.

В выражении х / 100 + 32

х делится на 100 и к результату добавляется 32. Но что, если программисту нужно поделить х на сумму 100 и 32? В таком случае ему придется использовать скобки: х / (100 + 32)

При вычислении такого выражения х будет делиться на 132.

Заметим, что начальное выражение X / 100 4 32 идентично следующему:

(х / 100) + 32

Почему это действительно так? Потому что C + + сначала выполняет операции с высшим приоритетом. А приоритет операций умножения и деления выше, чем сложения и вычитания. Поэтому скобки, указывающие на высокий приоритет данной

операции, можно опустить.

На основе сказанного можно сделать вывод: в случае необходимости приоритет оператора можно повысить, используя скобки.



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

Унарными называются те операторы, которые имеют только один аргумент, например -а.

Унарными математическими операторами являются + ++ и --. Рассмотрим некоторые из них:

in таг1 = 10; int var2 = -varl;

Здесь в последнем выражении используется унарный оператор - .

Оператор минус изменяет знак своего аргумента (в примере это varl) на противоположный. Положительные числа становятся отрицательными и наоборот. Оператор плюс знака аргумента не изменяет и фактически вообще ни на что не влияет.

Операторы ++ и вы можете увидеть впервые. Они увеличивают или уменьшают на 1 значение аргумента и поэтому называются операторами инкремента и декремента (от апгл. increment (увеличивать) и decrement (уменьшать). - Прим. перев.). К действительным переменным их применение недопустимо. После выполнения приведенного ниже фрагмента значение переменной будет равно 11.

int var = 10; Инициализация переменной

var + +; чение; значение переменной равно 11

Операторы инкремента и декремента могут находиться либо перед аргументом

(префиксная форма), либо после него (постфиксная форма). В зависимости от способа записи, выполнение операторов инкремента и декремента имеет свои особенности.

Рассмотрим оператор инкремента (принципы работы оператора декремента те же).

Предположим, что переменная п имеет значение 5. Оба способа применения к п оператора инкремента (++п и п++) приведут к результату 6. Разница между ними состоит в том, что значение п в выражении ++п равно б, в то время как в выражении с постфиксной формой записи оно равно 5. Это можно проиллюстрировать следующим примером:

объявляем три целые переменные int nl, п2, пЗ ;

п1 = 5;

п2 = ++nl; обе переменные - nl и п2 - получают значение б

nl = 5;

пЗ = nl+ ; nl принимает значение 6, а пЗ - 5

Другими словами, переменной г.2 присваивается уже увеличенное префиксным

оператором инкремента значение nl, тогда как переменной передается еще не увеличенное постфиксным оператором значение nl.

Ucn(Ub3o€aHueoneficuHOfio€ п/гис€оенил

Операторы присвоения являются бинарными, изменяющими значения своих левых аргументов. Обыкновенный оператор присвоения = абсолютно необходим во всех языках программирования. Этот оператор сохраняет значение правого аргумента



в левом. Однако причуды авторов языка привели к появлению и других операторов присвоения.

Создатели C + + заметили, что присвоение часто имеет вид

variable = variable # constant

Здесь # представляет собой какой-то бинарный оператор. Следовательно, чтобы увеличить целую переменную на два, программист может написать: nVariable = nVariable + 2;

Из этой записи следует, что к значению переменной nVariable добавляется двойка и результат снова сохраняется в nVariable.

Использование в левой и правой части выражения одной и той же переменной весьма распространенное явление в программировании.


Поскольку одна и та же переменная находится по обе стороны знака равенства, б1ло решено просто добавить оператор, используемый при вычислении, к знаку присвоения. В таких специфических операторах присвоения допускается использование всех бинарных операторов. Поэтому указанное выше выражение можно сократить до

nVariable += 2;

Смысл этой записи таков: значение переменной nVariable увеличено на 2 .

Почему так важен оператор инкремента

Разработчики С++- заметили, что программисты прибавляют \ чаще, чем любую : другую константу. Учитывая это, в язык была добавлена соответствующая конст-. ; рукция.

Кроме того, большинство процессоров способны выполнять команды инкремента 1

быстрее, чем команды сложения. Учитывая мощность микропроцессоров, которые

использовались во время создания С++, подобное нововведение было действи- тельно важнь .

Модифицированные операторы присвоения используются не так часто,

как обычные, но как правило повышают удобочитаемость программ.




1 ... 7 8 9 [ 10 ] 11 12 13 ... 108

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика