Операции и выражения
ЗАМЕЧАНИЕ
Именованные константы
ВНИМАНИЕ
Переменные создаются при входе в их область действия (блок) и уничтожаются при выходе. Это означает, что после выхода из блока значение переменной не сохраняется. При повторном входе в этот же блок переменная создается заново.
Можно запретить изменять значение переменной, задав при ее описании ключевое слово 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 = с, а затем его результат становится правым операндом для операции присваивания переменной а.