
Глава 3. Операции и целочисленные выражения
3.1. Операции языка c#
Набор операций языка C# весьма велик и рассматривать возможности каждой из них мы будем постепенно по мере необходимости. Однако, предварительно приведем список операций, разместив их в порядке уменьшения их приоритетов.
Таблица 3.1. Операции, ассоциативные слева – направо.
Базовые (первичные) операции | |
. |
выбор члена (класса или объекта) |
() |
вызов метода или делегата |
[ ] |
доступ по индексу (индексирование) |
++ |
постфиксный инкремент |
-- |
постфиксный декремент |
new |
создание объекта (создание экземпляра) |
typeof |
идентификация типа |
sizeof |
определение размера операнда (только в опасном коде) |
checked |
контроль за вычислением выражения |
unchecked |
отмена контроля за вычислением выражения |
-> |
доступ к члену (объекта) по указателю (только в опасном коде) |
Унарные операции | |
+ |
унарный плюс (задание знака) |
- |
унарный минус (задание знака) |
+ + |
префиксный инкремент |
- - |
префиксный инкремент |
~ |
поразрядное отрицание |
! |
логическое отрицание |
(тип) |
приведение к заданному типу |
& |
получение адреса (только в опасном коде) |
* |
разыменование указателя (только в опасном коде) |
Арифметические бинарные операции | |
* |
умножение |
/ |
деление |
% |
получение остатка при целочисленном делении |
+ |
сложение |
- |
вычитание |
Операции поразрядных сдвигов | |
>> |
поразрядный сдвиг вправо |
<< |
поразрядный сдвиг влево |
Операции отношений (сравнений) | |
< |
меньше |
> |
больше |
<= |
меньше или равно |
>= |
больше или равно |
is as |
сравнение типов (возвращает логическое значение) проверка типов (возвращает тип или null) |
== != ?? |
сравнение на равенство сравнение на неравенство сравнение null (поглощение null) |
Поразрядные операции | |
& ^ | |
побитовое (поразрядное) И побитовое (поразрядное) взаимоисключающее ИЛИ побитовое (поразрядное) ИЛИ |
Логические бинарные операции | |
& | ^ && II |
конъюнкция (логическое И) дизъюнкция (логическое ИЛИ) взаимоисключающая дизъюнкция условная конъюнкция условная дизъюнкция |
Тернарная операция | |
?: |
условная операция |
Таблица 3.2 Операции, ассоциативные справа – налево.
|
присваивание |
+= |
сложение с присваиванием |
-= |
вычитание с присваиванием |
*= |
умножение с присваиванием |
/= |
деление с присваиванием |
%= |
получение остатка от деления с присваиванием |
&= |
поразрядное И с присваиванием |
^= |
поразрядное исключающее ИЛИ с присваиванием |
|= |
поразрядное ИЛИ с присваиванием |
>>= |
поразрядный сдвиг вправо с присваиванием |
<<= |
поразрядный сдвиг влево с присваиванием |
В таблице 3.1. операции объединены в группы. В каждую группу помещены операции одного ранга. Операции из таблицы 1 выполняются слева направо, но это справедливо только для операций одного ранга. Например, x*y/z будет вычисляться в соответствии с выражением (x*y)/z.
Операции группы, размещенной выше, имеют более высокий ранг, нежели операторы групп, размещенных ниже. Например, 2+6/2 равно 5, так как операция / имеет более высокий ранг, недели бинарная операция +. Начинающие программисты, забывая о приоритетах операций, иногда ошибаются, приводя для математического соотношения a/(b*c) такое выражение: а/b*с. Его следует записать, используя скобки: а/(b*с), или без скобок: а/b/с.