Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Podbelsky_V_V_C_Bazovy_kurs.pdf
Скачиваний:
69
Добавлен:
02.06.2015
Размер:
1.73 Mб
Скачать

30

Г л а в а 2

 

 

3.Укажите назначение десятичного типа и правила записи его констант.

4.Назовите способы записи символьных констант.

5.Приведите примеры эскейп-последовательностей.

6.Назовите размеры (в битах) представления в памяти констант базовых типов.

7.Какие символы допустимы в идентификаторах C#?

8.Приведите примеры служебных слов языка C#.

9.Является ли идентификатор Main служебным словом?

10.Что такое инициализация переменной?

11.Чем именованная константа отличается от константы-литерала?

Операции и целочисленные выражения

3.1.Операции языка C#

Впредыдущей главе мы ввели понятие типа и рассмотрели классификацию типов, принятую в языке C#. Привели сведения

определьных значениях констант и переменных базовых типов. Тем самым для базовых типов определена совокупность допустимых значений. Чтобы полностью охарактеризовать базовые типы, требуется рассмотреть допустимые для них операции.

Набор операций языка C# весьма велик и рассматривать возможности каждой из них мы будем постепенно по мере необходимости. Однако, предварительно приведем список операций, разместив их в порядке уменьшения их приоритетов (табл. 3.1 и 3.2)

Таблица 3 . 1 .

Операции, ассоциативные слева – направо

Базовые (первичные) операции

.Выбор члена (класса или объекта)

( )

Вызов метода или делегата

[ ]

Доступ по индексу (индексирование)

++Постфиксный инкремент

- -

Постфиксный декремент

new

Создание объекта (создание экземпляра)

typeof

Идентификация типа

sizeof

Определение размера операнда (только в опасном

 

коде)

checked

Контроль за переполнениями в выражениях

unchecked

Отмена контроля за переполнениями в выражениях

–>

Доступ к члену (объекта) по указателю (только в

 

опасном коде)

 

 

 

Унарные операции

+Унарный плюс (задание знака)

-Унарный минус (задание знака)

++Префиксный инкремент

32 Г л а в а 3

Продолжение

 

Унарные операции

 

 

- -

Префиксный декремент

~

Поразрядное отрицание

!

Логическое отрицание

(тип)

Приведение к заданному типу

&

Получение адреса (только в опасном коде)

*

Разыменование указателя (только в опасном коде)

 

 

 

 

Арифметические бинарные операции

 

 

*

Умножение

/

Деление

%

Получение остатка при целочисленном делении

 

 

+

Сложение

-

Вычитание

 

 

 

Операции поразрядных сдвигов

 

 

>>

Поразрядный сдвиг вправо

<<

Поразрядный сдвиг влево

 

 

 

Операции отношений (сравнений)

 

 

<

Меньше

>

Больше

<=

Меньше или равно

>=

Больше или равно

is

Сравнение типов (возвращает логическое значение)

as

Проверка типов (возвращает тип или null)

 

 

 

==

Сравнение на равенство

!=

Сравнение на неравенство

??

Сравнение с null (поглощение null)

 

 

 

Поразрядные операции

 

 

&

Побитовое (поразрядное) И

^

Побитовое (поразрядное) исключающее ИЛИ

|

Побитовое (поразрядное) ИЛИ

 

 

 

Логические бинарные операции

 

 

&

Конъюнкция (логическое И)

 

 

Операции и целочисленные выражения

33

 

 

Продолжение

 

Логические бинарные операции

 

 

|

Дизъюнкция (логическое ИЛИ)

^

Исключающая дизъюнкция

&&

Условная конъюнкция

||

Условная дизъюнкция

 

 

 

Тернарная операция

 

 

?:

Условная операция

 

 

Таблица 3 . 2 .

Операции присваивания (ассоциативные справа – налево)

=Присваивание

+= Сложение с присваиванием -= Вычитание с присваиванием *= Умножение с присваиванием /= Деление с присваиванием

%= Получение остатка от деления с присваиванием &= Поразрядное И с присваиванием ^= Поразрядное исключающее ИЛИ с присваиванием |= Поразрядное ИЛИ с присваиванием

>>= Поразрядный сдвиг вправо с присваиванием <<= Поразрядный сдвиг влево с присваиванием

В таблице 3.1. операции объединены в группы. В каждую группу помещены операции одного ранга. Операции из таблицы 3.1 выполняются слева направо, но это справедливо только для операций одного ранга. Например, x*y/z будет вычисляться в соответствии с выражением (x*y)/z.

Операции группы, размещенной выше, имеют более высокий ранг, чем операторы групп, размещенных ниже. Например, 2+6/2 равно 5, так как операция / имеет более высокий ранг, бинарная операция +. Начинающие программисты, забывая о приоритетах операций, иногда ошибаются, приводя для математического соотношения

a

b * c

34

Г л а в а 3

 

 

такое выражение: a/b*c. Его следует записать, используя скобки: a/(b*c), или без скобок a/b/c.

3.2. Операции присваивания и оператор присваивания

Операции присваивания, помещенные в табл. 3.2, имеют более низкий ранг (меньший приоритет), чем операции из табл. 3.1. Еще одна особенность операций присваивания состоит в том, что они выполняются справа – налево. У всех этих операций одинаковый ранг. Например, для выражения x=y=z=c с помощью скобок последовательность вычисления можно обозначить так: x=(y=(z=c)). Для сравнения отметим, что выражению x+y+z+c эквивалентно выражение

((x+y)+z)+c.

Присваивание – фундаментальное понятие программирования. Средства для выполнения присваивания существуют почти в каждом языке программирования.

Начнём с того, что в С# единичный знак = обозначает бинарную операцию (не оператор!). Формат применения операции присваивания:

имя_переменной = выражение

Конструкция имя_переменной = выражение, представляет собой бинарное выражение с двумя операндами. Последовательность обработки такого выражения следующая:

1)вычислить (получить) значение выражения;

2)присвоить полученное значение переменной;

3)вернуть в точку размещения выражения значение, присвоенное переменной.

Если конструкция имя_переменной = выражение завершается точкой с запятой и размещена в последовательности других операторов программы, то она превращается

воператор присваивания. В этом случае действие ограничивается двумя первыми пунктами: вычислить значение выражения и присвоить полученное значение переменной, поименованной слева от знака присваивания. Третий пункт не нужен – значение всего выражения с операцией присва-

Операции и целочисленные выражения

35

 

 

ивания игнорируется. Однако, иногда удобно использовать цепочки присваиваний, и в этом случае для всех выражений присваивания, размещённых справа, их значения используются явно.

Пример:

int a, b, c, d; a=b=c=d=842;

После выполнения такого оператора переменные a, b, c, d принимают одно и то же значение 842. Последовательность вычислений: вычисляется выражение d=842, тем самым переменная d становится равной 842, и это же значение принимает участие в следующем выражении присваивания, где левым операндом служит переменная c, и т.д.

Кроме обычной операции присваивания, в С# есть составные операции присваивания, общую форму которых можно представить так:

бинарная_операция =

Здесь бинарная_операция — это одна из следующих арифметических и логических операций:

+ сложение, - вычитание, * умножение, / деление,

% получение остатка целочисленного деления, & поразрядная конъюнкция, | поразрядная дизъюнкция,

^ поразрядное исключающее ИЛИ, >> поразрядный сдвиг вправо битового представления

значения операнда, << поразрядный сдвиг влево битового представления

значения операнда.

Назначение составных операций присваивания – упростить запись и ускорить вычисление выражений присваивания, в которых левый операнд (переменная) одновременно используется в качестве левого операнда выражения, расположенного справа от операции присваивания.

36

Г л а в а

3

 

 

Пример оператора присваивания

Эквивалентный по результату

 

с традиционной операцией:

оператор:

 

n=n+48;

n+=48;

Традиционный оператор, запись

Применение составной

 

которого можно упростить:

операции присваивания:

 

n=n/(n*n);

n/=n*n;

3.3. Операции инкремента (++) и декремента (--)

Сокращёнными формами операции присваивания можно считать операции автоувеличения (инкремент) ++ и автоуменьшения (декремент) --.

Операция инкремента ++ увеличивает на 1 значение операнда. Операция декремента -- уменьшает на 1 значение операнда.

Обе операции имеют префиксную и постфиксную формы. Префиксная форма предусматривает изменение значения операнда до использования этого значения. Постфиксная изменяет значение операнда после использования этого значения.

Пример:

int zone = 240, res; // Объявление двух переменных res = zone++; //Эквивалент: res=zone; zone=zone+1; res =++zone; // Эквивалент: zone=zone+1; res=zone;

Значение res после выполнения всех этих операторов равно 242. Операндом для операций ++ и -- может быть только леводопустимое неконстантное выражение (например, переменная). Следовательно, ошибочными будут выражения 84--,++0,

(n-12)++, --(x+y) и им подобные.

Отметим, что операции ++ и -- применимы к операндам всех базовых типов значений за исключением логического (bool).

3.4. Выражения с арифметическими операциями

Кроме операций инкремента и декремента, для целочисленных операндов определены, во-первых, стандартные арифметические операции:

Операции и целочисленные выражения

37

 

 

●●унарные - и + (определяют знак выражения); ●●бинарные -, +, *, / (вычитание, сложение, умножение,

деление).

Среди них заслуживает пояснения только операция деления

– ее результат при двух целочисленных операндах всегда округляется до наименьшего по абсолютной величине целого значения.

// 03_01.cs целочисленное деление using System;

class Program

{

static void Main()

{

Console.WriteLine("-13/4 = " + -13 / 4); Console.WriteLine("15/-4 = " + 15 /-4); Console.WriteLine("3/5 = " + 3 / 5);

}

}

Обратите внимание на аргумент метода WriteLine(). Это выражение с операцией конкатенации строк +. Первая строка

– изображение некоторого выражения. Вторая строка – строковое представление результата вычисления арифметического выражения, например, -13/4.

Результат выполнения программы:

-13/4 = -3 15/-4 = -3 3/5 = 0

Отдельно следует рассмотреть операцию получения остатка от деления целочисленных операндов %. При ненулевом делителе для целочисленных величин выполняется соотношение:

(x / y * y +x % y) равно x.

Пример:

// 03_02.cs получение остатка от деления using System;

class Program

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]