Преобразование типов в выражениях

Преобразования типов выполняются по принятым в C# правилам продвижения типов.Ниже приведен алгоритм, определяемый этими правилами для операций с двумя операндами.

ЕСЛИ один операнд имеет тип decimal, ТО и второй операнд продвигается

к типу decimal(но если второй операнд имеет тип floatили double, результат

будет ошибочным).

ЕСЛИ один операнд имеет тип double, ТО и второй операнд продвигается

к типу double.

ЕСЛИ один операнд имеет тип float, ТО и второй операнд продвигается к типу

float.

ЕСЛИ один операнд имеет тип ulong, ТО и второй операнд продвигается

к типу ulong(но если второй операнд имеет тип sbyte, short, intили long,

результат будет ошибочным).

ЕСЛИ один операнд имеет тип long, ТО и второй операнд продвигается к типу

long.

ЕСЛИ один операнд имеет тип uint, а второй — тип sbyte, shortили int, ТО

оба операнда продвигаются к типу long.

ЕСЛИ один операнд имеет тип uint, ТО и второй операнд продвигается к типу

uint.

ИНАЧЕ оба операнда продвигаются к типу int.

// Пример неожиданного результата продвижения типов!

using System;

class PromDemo

{

static void Main()

{

byte b;

b = 10;

b = (byte)(b * b); // Необходимо приведение типов!!

Console.WriteLine("b: " + b);

}

}

Как ни странно, но когда результат вычисления выражения b*b присваивается обратно переменной b, то возникает потребность в приведении к типу byte!Объясняется это тем, что в выражении b*bзначение переменной bпродвигается к типу intи поэтому не может быть присвоено переменной типа byteбез приведения типов.

В следующем фрагменте кода требуется обратное приведение

к типу char, поскольку операнды ch1 и ch2 в выражении продвигаются к типу int.

char ch1 = 'a', ch2 = 'b';

ch1 = (char)(ch1 + ch2);

Приведение типов в выражениях

// Пример приведения типов в выражениях.

using System;

class CastExpr

{

static void Main()

{

double n;

for (n = 1.0; n <= 10; n++)

{

Console.WriteLine("Квадратный корень из {0} равен {1}",

n, Math.Sqrt(n));

Console.WriteLine("Целая часть числа: (0)",

(int)Math.Sqrt(n));

Console.WriteLine("Дробная часть числа: (0)",

Math.Sqrt(n) - (int)Math.Sqrt(n));

Console.WriteLine();

}

}

}

ГЛАВА

Операторы

Операторы отношения и логические операторы

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

== Равно

!= Не равно

> Больше

< Меньше

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

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

К числу логических относятся операторы, приведенные ниже

& И (*)

| ИЛИ (+)

^ Исключающее ИЛИ

&& Укороченное И

|| Укороченное ИЛИ

! НЕ

Импликация — это двоичная операция, результатом которой является ложное значение только в том случае, если левый ее операнд имеет истинное значение, а правый — ложное.

P q

true true true

true false false

false false true

false true true

Операция импликации может быть построена на основе комбинации логических

операторов!и |, как в приведенной ниже строке кода

!р | q

// Построение операции импликации в С#.

using System;

class Implication

{

static void Main()

{

bool p = false, q = false;

int i, j;

for (i = 0; i < 2; i++)

{

for (j = 0; j < 2; j++)

{

if (i == 0) p = true;

if (i == 1) p = false;

if (j == 0) q = true;

if (j == 1) q = false;

Console.WriteLine("p равно " + p + ", q равно " + q);

if (!p | q)

Console.WriteLine("Результат импликации " + p +

" и " + q + " равен " + true);

Console.WriteLine();

}

}

}

}

Результат выполнения этой программы выглядит так.

р равно True, q равно True

Результат импликации True и True равен True

р равно True, q равно False

р равно False, q равно False

Результат импликации False и True равен True

р равно False, q равно False

Результат импликации False и False равен True


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: