Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+Presentation_2.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
363.52 Кб
Скачать

2.4. Выражения и операции

(http://msdn.microsoft.com/ru-ru/library/ms173142)

(http://msdn.microsoft.com/ru-ru/library/6a71f45d)

Таблица 2.6. Операции по категориям и их приоритет

Выражение

Описание (приоритет)

Основные операторы (9)

x.y

Доступ к членам

f(x)

Вызов функции, метода и делегата

a[x]

Доступ к элементу массива

x++

Постфиксное приращение (инкремент)

x--

Постфиксное уменьшение (декремент)

new T(...)

Создание объекта и делегата

new T(...){...}

Создание объекта с инициализатором

new {...}

Анонимный инициализатор объекта

new T[...]

Создание массива.

typeof(T)

Получение объекта System.Type для T (определение типа)

checked(x)

Вычисление выражения в проверенном контексте (создание проверяемого блока)

unchecked(x)

Вычисление выражения в непроверенном контексте (создание непроверяемого блока)

default(T)

Получение значения по умолчания для типа T

delegate {}

Анонимная функция (анонимный метод)

x->y

Объединение разыменования указателя и доступа к члену (x – это указатель типа T*, а y – это член T) (требуется небезопасный контекст)

Унарные операторы (8)

+x

Унарный плюс

-x

Унарный минус

!x

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

~x

Поразрядное отрицание (инверсия разрядов)

++x

Префиксное приращение (инкремент)

--x

Префиксное уменьшение (декремент)

(T)x

Явное преобразование типа переменной x в тип T

&

Унарный оператор возвращает адрес своего операнда (требуется небезопасный контекст)

sizeof(x)

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

Мультипликативные операторы (7)

*

Умножение

/

Деление

%

Остаток от деления

Аддитивные операторы (6)

x + y

Сложение, объединение строк, объединение делегатов

x - y

Вычитание, удаление делегатов

Операторы сдвига (5)

x << y

Сдвиг влево

x >> y

Сдвиг вправо

Операторы отношения и типа (4)

x < y

Меньше

x > y

Больше

x <= y

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

x >= y

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

x is T

Проверка принадлежности к типу. Возвращает значение true, если x относится к типу T, в противном случае возвращает значение false

x as T

Преобразование типа. Возвращает x типа T или нулевое значение, если x не относится к типу T

Операторы равенства (3)

x == y

Равно

x != y

Не равно

Логические, условные операторы и Null-операторы (2)

x & y

Логическое умножение – для операндов типа bool.

Поразрядное И (AND) – для целых операндов

x | y

Логическое сложение – для операндов типа bool.

Поразрядное ИЛИ (OR) – для целых операндов

x ^ y

Логическое исключающее ИЛИ – для операндов типа bool.

Поразрядное исключающее ИЛИ (XOR) – для целых операндов

x && y

Условное умножение (AND) – вычисляет y только если x имеет значение true

x || y

Условное сложение (OR) – вычисляет y только если x имеет значение false

x ?? y

Объединение нулей – равно y, если x – нулевое, в противном случае равно x

x ?: y : z

Условная операция. Результат равен y, если x имеет значение true, и z если x имеет значение false

Операторы назначения и анонимные операторы (1)

=

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

x op= y

Составное присваивание. Поддерживает следующие операторы: += , -= , *= , /= , %= , &= , |= , ^= , <<= , >>=

(T x) => y

Анонимная функция (лямбда-выражение)

Основные операции.

Операции постфиксных инкремента и декремента:

int x = 1;

Console.WriteLine("{0} {1} {2}", x++, x--, x); // Вывод: 1 2 1

Операция sizeof(x) определяет размер в байтах для переменной встроенного или ссылочного типа, а также типа указателей или структур:

int intSize = sizeof(int); // Результат: intSize = 4

Пример 2.4. Использование операции ->.

/ Компилировать с ключем: /unsafe

struct Point

{ public int x, y;

}

class MainClass12

{ unsafe static void Main()

{ Point pt = new Point();

Point* pp = &pt;

pp->x = 123;

pp->y = 456;

Console.WriteLine("{0} {1}", pt.x, pt.y); // Вывод: 123 456

}

}

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

Пример 2.5. Использование операции инверсии разрядов целого числа (~).

using System;

class Demo

{ public static string ByteToStr(byte b)

// Преобразование байта (b) в двоичную форму

{ string s = ""; // Выходная строка

// Цикл преобразования 8-ми разрядов

for (sbyte n = 7; n >= 0; n--)

{ if ((byte)(b / Math.Pow(2, n)) == 1)

{ s = s + '1';

b = (byte)(b - (byte)(Math.Pow(2, n)));

}

else

s = s + '0';

}

return s;

}

static void Main()

{ byte b = 1;

int i = (int) b;

i = ~i;

byte b2 = (byte) (i);

Console.WriteLine("Демонстрация инверсии разрядов " +

"целого числа:");

Console.WriteLine("Значение байта без инверсии: {0,3};\t" +

"двоичная форма: {1}", b, ByteToStr(b));

Console.WriteLine("Значение байта с инверсией: {0,3};\t" +

"двоичная форма: {1}", b2, ByteToStr(b2));

Console.ReadLine();

}

}

/* Вывод:

Демонстрация инверсии разрядов целого числа:

Значение байта без инверсии: 0; двоичная форма: 00000001

Значение байта с инверсией: 255; двоичная форма: 11111110

*/

Операции сдвига.

Пример 2.6. Использование сдвиговых операций.

using System;

class Demo

{ public static string ByteToStr(byte b)

// Преобразование байта (b) в двоичную форму

{ ... // Код функции смотри в примере 2.5

}

static void Main()

{ Console.WriteLine("Демонстрация сдвига разрядов " +

"целого числа:");

byte b = 1;

for (int i = 1; i <= 8; i++)

{ Console.WriteLine("Значение байта: {0,3};\t" +

"двоичная форма: {1}", b, ByteToStr(b));

int k = (int) b;

b = (byte)(k << 1);

}

Console.ReadLine();

}

}

/* Вывод:

Демонстрация сдвига разрядов целого числа:

Значение байта: 1; двоичная форма: 00000001

Значение байта: 2; двоичная форма: 00000010

Значение байта: 4; двоичная форма: 00000100

Значение байта: 8; двоичная форма: 00001000

Значение байта: 16; двоичная форма: 00010000

Значение байта: 32; двоичная форма: 00100000

Значение байта: 64; двоичная форма: 01000000

Значение байта: 128; двоичная форма: 10000000

*/

Условная операция ?: имеет три операнда:

<условие> ? <выражение_1> : <выражение_2>;

Например:

int а = 1, b = 4, с;

с = (а > b) ? а : b; // Результат: с = 4

а = (с > 0) ? ++а : ++Ь; // Результат: а = 2

C# допускает использование сокращенных записей операций с присваиванием (составного присваивания):

А += В вместо А = А + В А &= В вместо А = А & В

А -= В вместо А = А - В А |= В вместо А = А | В

А *= В вместо А = А * В А ^= В вместо А = А ^ В

А /= В вместо А = А / В А <<= В вместо А = А << В

А %= В вместо А = А % В А >>= В вместо А = А >> В

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