Операции и выражения
ЗАМЕЧАНИЕ
Именованные константы
ВНИМАНИЕ
Переменные создаются при входе в их область действия (блок) и уничтожаются при выходе. Это означает, что после выхода из блока значение переменной не сохраняется. При повторном входе в этот же блок переменная создается заново.
Можно запретить изменять значение переменной, задав при ее описании ключевое слово const, например:
const int b=1;
const float x=0.1, у=0.1f; // const распространяется на обе переменные
Такие величины называют именованными константами, или просто константами. Они применяются для того, чтобы вместо значений констант можно было использовать в программе их имена. Это делает программу более понятной и облегчает внесение в нее изменений, поскольку изменить значение достаточно только в одном месте программы.
Улучшение читабельности происходит только при осмысленном выборе имен констант. В хорошо написанной программе вообще не должно встречаться иных чисел, кроме 0 и 1, все остальные числа должны задаваться именованными константами с именами, отражающими их назначение.
Именованные константы должны обязательно инициализироваться при описании. При инициализации можно использовать не только константу, но и выражение — главное, чтобы оно было вычисляемым на этапе компиляции, например:
const int b=1; а=100;
const int x=b*a+25;
Выражение — это правило вычисления значения. В выражении участвуют операнды, объединенные знаками операций. Операндами простейшего выражения могут быть константы, переменные и вызовы функций.
Например, а+2 — это выражение, в котором + является знаком операции, а а и 2 — операндами. Пробелы внутри знака операции, состоящей из нескольких символов, не допускаются. По количеству участвующих в одной операции операндов операции делятся на унарные, бинарные и тернарную. Операции С# приведены в табл. 3.11. В этой таблице символ х призван показать расположение операнда, и не является частью знака операции.
Таблица 3.1.Операции С#
| Категория | Знак операции | Название | Описание |
| Первичные | . | Доступ к элементу | С. 105 |
| х() | Вызов метода или делегата | С, 108, 221 | |
| х[] | Доступ к элементу | С. 127 | |
| x++ | Постфиксный инкремент | С. 47 | |
| x-- | Постфиксный декремент | С. 47 | |
| new | Выделение памяти | С. 48 | |
| typeof | Получение типа | С. 280 | |
| checked | Проверяемый код | С. 46 | |
| unchecked | Непроверяемый код | С. 46 | |
| Унарные | + | Унарный плюс | |
| - | Унарный минус (арифметическое отрицание) | С, 48 | |
| ! | Логическое отрицание | С, 48 | |
| ~ | Поразрядное отрицание | С. 48 | |
| ++x | Префиксный инкремент | С, 47 | |
| --x | Префиксный декремент | С. 47 | |
| (тип)х | Преобразование типа | С. 49 | |
| Мультипликативные (типа умножения) | * | Умножение | С. 50 |
| / | Деление | С, 50 | |
| % | Остаток от деления | С. 50 | |
| Аддитивные (типа сложения) | + | Сложение | С. |
| - | Вычитание | С. 53 | |
| Сдвига и проверки типа | << | Сдвиг влево | С. 54 |
| >> | Сдвиг вправо | С. 54 | |
| < | Меньше | С. 54 | |
| > | Больше | С, 54 | |
| <= | Меньше или равно | С. 54 | |
| >= | Больше или равно | С. 54 | |
| is | Проверка принадлежности типу | С, 194 | |
| as | Приведение типа | С, 194 | |
| Проверки на равенство | = = | Равно | С. 54 |
| ! = | Не равно | С. 54 | |
| Поразрядные логические | & | Поразрядная конъюнкция (И) | С. 55 |
| ^ | Поразрядное исключающее ИЛИ | С. 55 | |
| | | Поразрядная дизъюнкция (ИЛИ) | С. 55 | |
| Условные логические | && | Логическое И | С. 56 |
| || | Логическое ИЛИ | С. 56 | |
| Условная | ?: | Условная операция | С, 56 |
| Присваивания | = | Присваивание | С. 56 |
| *= | Умножение с присваиванием | ||
| /= | Деление с присваиванием | ||
| %= | Остаток отделения с присваиванием | ||
| += | Сложение с присваиванием | ||
| -= | Вычитание с присваиванием | ||
| <<= | Сдвиг влево с присваиванием | ||
| >>= | Сдвиг вправо с присваиванием | ||
| &= | Поразрядное И с присваиванием | ||
| ^= | Поразрядное исключающее ИЛИ с присваиванием | ||
| |= | Поразрядное ИЛИ с присваиванием |
Операции в выражении выполняются в определенном порядке в соответствии с приоритетами, как и в математике. В табл. 3.1 операции расположены по убыванию приоритетов, уровни приоритетов разделены в таблице горизонтальными линиями.
Результат вычисления выражения характеризуется значением и типом. Например, пусть а и b — переменные целого типа и описаны так:
int а=2, b=5;
Тогда выражение а+b имеет значение 7 и тип int, а выражение а=b имеет значение, равное помещенному в переменную b (в данному случае — 5), и тип, совпадающий с типом этой переменной.
Если в одном выражении соседствуют несколько операций одинакового приоритета, операции присваивания и условная операция выполняются справа налево, остальные — слева направо. Для изменения порядка выполнения операций используются круглые скобки, уровень их вложенности практически не ограничен.
Например, а+b+с означает (а+b)+с, а а=b=с означает а=(b=c). То есть сначала вычисляется выражение b = с, а затем его результат становится правым операндом для операции присваивания переменной а.