Тверской государственный университет
Опубликован: 22.11.2005 | Доступ: свободный | Студентов: 30405 / 1848 | Оценка: 4.31 / 3.69 | Длительность: 28:26:00
ISBN: 978-5-9556-0050-5
Лекция 6:

Выражения. Операции в выражениях

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >

Статические поля и методы арифметических классов

Все арифметические классы, в том числе класс Int, обладают двумя полезными полями (свойствами) - MinValue и MaxValue. Эти поля возвращают минимальное и максимальное значение, которое могут иметь экземпляры класса. Поля являются статическими и потому недоступны для экземпляров класса и могут быть вызваны только при указании имени класса. Разумно привести пример вызова этих полей для класса Int и, например, для класса Double:

//Min и Max значения типов
Console.WriteLine("Class int");
Console.WriteLine("Мин. значение int = " + int.MinValue);
Console.WriteLine("Макс. значение int = " + int.MaxValue);
Console.WriteLine("Class double");
Console.WriteLine("Мин. значение double = " + double.MinValue);
Console.WriteLine("Макс. значение double = " + double.MaxValue);

Все арифметические классы, в том числе класс Int, обладают перегруженным статическим методом Parse, у которого первым обязательным параметром является строка, задающая значение соответствующего арифметического типа в привычной для данного региона (локализованной) форме. Форматом строки и стилем ее представления можно управлять с помощью других параметров метода Parse. Вот пример вызова этого метода для классов Int и Double:

/// <summary>
/// Преобразования типа с использованием метода Parse
/// </summary>
public void Parsing()
{
	//method Parse
	Console.WriteLine("Введите целое");
	string strdata = Console.ReadLine();
	int intdata = int.Parse(strdata);
	Console.WriteLine("Введите число с дробной частью и порядком");
	strdata = Console.ReadLine();
	double doubdata = double.Parse(strdata);
	Console.WriteLine("intdata = {0}; doubdata = {1}",
		intdata, doubdata);
}
//Parsing

Как видите, метод Parse с успехом заменяет соответствующий метод класса Convert.

На рис. 6.3 можно увидеть консольный вывод, полученный в результате работы процедуры Parsing.

Результаты работы процедуры Parsing

Рис. 6.3. Результаты работы процедуры Parsing

Операция new

Пора вернуться к основной теме - операциям, допустимым в языке C#. Последней из еще не рассмотренных операций высшего уровня приоритета является операция new. Ключевое слово new используется в двух контекстах - как модификатор и как операция в инициализирующих выражениях объявителя. Во втором случае результатом выполнения операции new является создание нового объекта и вызов соответствующего конструктора. Примеров подобного использования операции new было приведено достаточно много, в том числе и в этой лекции.

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

В языке C# имеются обычные для всех языков арифметические операции - " +, -, *, /, % ". Все они перегружены. Операции " + " и " - " могут быть унарными и бинарными. Операция деления " / " над целыми типами осуществляет деление нацело, для типов с плавающей и фиксированной точкой - обычное деление. Операция " % " определена над всеми арифметическими типами и возвращает остаток от деления нацело. Тип результата зависит от типов операндов. Приведу пример вычислений с различными арифметическими типами:

/// <summary>
/// Арифметические операции
/// </summary>
public void Ariphmetica()
{
	int n = 7,m =3, p,q;
	p= n/m; q= p*m + n%m;
	if (q==n) Console.WriteLine("q=n");
	else Console.WriteLine("q!=n");
	double x=7, y =3, u,v,w;
	u = x/y; v= u*y;
	w= x%y;
	if (v==x) Console.WriteLine("v=x");
	else Console.WriteLine("v!=x");
	decimal d1=7, d2 =3, d3,d4,d5;
	d3 = d1/d2; d4= d3*d2;
	d5= d1%d2;
	if (d4==d1) Console.WriteLine("d4=d1");
	else Console.WriteLine("d4!=d1");
}//Ariphmetica

При проведении вычислений в первых двух случаях проверяемое условие оказалось истинным, в третьем - ложным. Для целых типов можно исходить из того, что равенство n = n/m*m + n%m истинно. Для типов с плавающей точкой выполнение точного равенства x = x/y*y следует считать скорее случайным, а не закономерным событием. Законно невыполнение этого равенства, как это имеет место при вычислениях с фиксированной точкой.

Операции отношения

Операции отношения можно просто перечислить - в объяснениях они не нуждаются. Всего операций 6 ( ==, !=, <, >, <=, >= ). Для тех, кто не привык работать с языком C++, стоит обратить внимание на запись операций "равно" и "не равно".

Операции проверки типов

Операции проверки типов is и as будут рассмотрены в последующих лекциях. (см. лекцию 19).

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

Операции сдвига вправо " >> " и сдвига влево " << " в обычных вычислениях применяются редко. Они особенно полезны, если данные рассматриваются как строка битов. Результатом операции является сдвиг строки битов влево или вправо на K разрядов. В применении к обычным целым положительным числам сдвиг вправо равносилен делению нацело на 2K, а сдвиг влево - умножению на 2K. Для отрицательных чисел сдвиг влево и деление дают разные результаты, отличающиеся на единицу. В языке C# операции сдвига определены только для некоторых целочисленных типов - int, uint, long, ulong. Величина сдвига должна иметь тип int. Вот пример применения этих операций:

/// <summary>
/// операции сдвига
/// </summary>
public void Shift()
{
	int n = 17,m =3, p,q;
	p= n>>2; q = m<<2;
	Console.WriteLine("n= " + n + "; m= " + m + "; p=n>>2 = "+p 
		+ "; q=m<<2 " + q);
	long x=-75, y =-333, u,v,w;
	u = x>>2; v = y<<2; w = x/4;
	Console.WriteLine("x= " + x + "; y= " + y + "; u=x>>2 = "+u 
		+ "; v=y<<2 " + v + "; w = x/4 = " + w);
}//Shift
< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Александр Галабудник
Александр Галабудник

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

Александра Гусева
Александра Гусева