2.2 Операции и выражения
В С# предусмотрен широкий набор операций, которые дают в руки программисту мощные рычаги управления при создании разнообразнейших выражений и их вычислении.
Выражение — это правило вычисления значения. В выражении участвуют операнды, объединенные знаками операций. Операндами простейшего выражения могут быть константы, переменные и вызовы функций.
Например, у + 9 — это выражение, в котором + является знаком операции, а у и 9 — операндами. Пробелы внутри знака операции, состоящей из нескольких символов, не допускаются. По количеству участвующих в одной операции операндов операции делятся на унарные, бинарные и тернарную. Операции С# приведены в табл. 2.
Таблица 2 - Операции С#
Категория |
Знак операции |
Название |
Первичные
|
. х() х[] Х++ Х-- new typeof checked unchecked |
Доступ к элементу Вызов метода или делегата Доступ к элементу Постфиксный инкремент Постфиксный декремент Выделение памяти Получение типа Проверяемый код Непроверяемый код |
Унарные
|
+ - ! ~ ++X --X (тип) x |
Унарный плюс Унарный минус (арифметическое отрицание) Логическое отрицание Поразрядное отрицание Префиксный инкремент Префиксный декремент Преобразование типа |
Мультипликативные (типа умножения) |
* / % |
Умножение Деление Остаток от деления |
Аддитивные (типа сложения) |
+ - |
Сложение Вычитание |
Сдвига |
<< >> |
Сдвиг влево Сдвиг вправо |
Отношения и проверки типа
|
< > <= >= is as |
Меньше Больше Меньше или равно Больше или равно Проверка принадлежности типу Приведение типа |
Проверки на равенство |
= = ! = |
Равно Не равно |
Поразрядные логические |
& ^ | |
Поразрядная конъюнкция (И) Поразрядное исключающее ИЛИ Поразрядная дизъюнкция (ИЛИ) |
Условные логические |
&& | | |
Логическое И Логическое ИЛИ |
Условная |
? : |
Условная операция |
Присваивания |
= *= /= %= += -= <<= >>= &= ^=
| = |
Присваивание Умножение с присваиванием Деление с присваиванием Остаток отделения с присваиванием Сложение с присваиванием Вычитание с присваиванием Сдвиг влево с присваиванием Сдвиг вправо с присваиванием Поразрядное И с присваиванием Поразрядное исключающее ИЛИ с присваиванием Поразрядное ИЛИ с присваиванием |
Операции в выражении выполняются в определенном порядке в соответствии с приоритетами. В табл. 2 операции расположены по убыванию приоритетов, уровни приоритетов разделены в таблице горизонтальными линиями.
Результат вычисления выражения характеризуется значением и типом. Например, пусть х и у — переменные целого типа и описаны так:
int х = 7, у = 3;
Тогда выражение х + у имеет значение 10 и тип int, а выражение х = у имеет значение, равное помещенному в переменную а (в данному случае — 3), и тип, совпадающий с типом этой переменной.
Если в одном выражении соседствуют несколько операций одинакового приоритета, операции присваивания и условная операция выполняются справа налево, остальные — слева направо. Для изменения порядка выполнения операций используются круглые скобки, уровень их вложенности практически не ограничен.
Например, а + b + с означает (а + b) + с, а х = b = с означает х = (b = с). То есть сначала вычисляется выражение b = с, а затем его результат становится правым операндом для операции присваивания переменной х.
Часто перед выполнением операции требуется вычислить значения операндов. Например, в выражении F(i) + G(i++) * Н(i) сначала вызываются функции F, G и H, а затем выполняются умножение и сложение. Операнды всегда вычисляются слева направо независимо от приоритетов операций, в которых они участвуют. Кстати, в приведенном примере метод H вызывается с новым значением i (увеличенным на 1).
