|
Программирование >> Аргументация конструирования
Выражения бывают как сложными, так и крайне простыми. Необычной особенностью 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 быстрее, чем команды сложения. Учитывая мощность микропроцессоров, которые использовались во время создания С++, подобное нововведение было действи- тельно важнь . Модифицированные операторы присвоения используются не так часто, как обычные, но как правило повышают удобочитаемость программ.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |