выражения х/у преобразуется в тип int благодаря приведению. В данном примере выражение х/у следует непременно указывать в скобках, иначе приведение к типу int будет распространяться только на переменную х, а не на результат ее деления на переменную у. Приведение типов в данном случае требуется потому, что неявное преобразование типа double в тип int невозможно.

Если приведение типов приводит к сужающему преобразованию, то часть информации может быть потеряна. Например, в результате приведения типа long к типу int часть информации потеряется, если значение типа long окажется больше диапазона представления чисел для типа int, поскольку старшие разряды этого числового значения отбрасываются. Когда же значение с плавающей точкой приводится к целочисленному, то в результате усечения теряется дробная часть этого числового значения. Так, если присвоить значение 1,23 целочисленной переменной, то в результате в ней останется лишь целая часть исходного числа (1), а дробная его часть (0,23) будет потеряна.

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

// Продемонстрировать приведение типов.

using System;

class CastDemo {

static void Main() { double x, y; byte b; int i; char ch; uint u; short s; long 1;

x = 10.0;

У = 3.0;

11 Приведение типа double к типу int, дробная часть числа теряется, i = (int) (х / у) ;

Console.WriteLine('Целочисленный результат деления х / у: ' + i) ; Console.WriteLine ();

// Приведение типа int к типу byte без потери данных, i = 255; b = (byte) i;

Console.WriteLine('b после присваивания 255: ' + b +

' -- без потери данных.');

// Приведение типа int к типу byte с потерей данных, i = 257; b = (byte) i;

Console.WriteLine('b после присваивания 257: ' + b +

' — с потерей данных.');

Console.WriteLine();

// Приведение типа uint к типу short без потери данных, и = 32000; s = (short) u;

Console.WriteLine('s после присваивания 32000: ' + s + ' — без потери данных.');

// Приведение типа uint к типу short с потерей данных, и = 64000; s = (short) u;

Console.WriteLine('s после присваивания 64000: ' + s + ' — с потерей данных. ') ;

Console.WriteLine();

// Приведение типа long к типу uint без потери данных.

1 = 64000; u = (uint) 1;

Console.WriteLine('и после присваивания 64000: ' + u +

' -- без потери данных.');

// Приведение типа long к типу uint с потерей данных.

1 = -12; u = (uint) 1;

Console.WriteLine('и после присваивания -12: ' + u +

' — с потерей данных.');

Console.WriteLine();

// Приведение типа int к типу char, b = 88; // код ASCII символа X ch = (char) b;

Console.WriteLine('ch после присваивания 88: ' + ch);

}

}

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

Целочисленный результат деления х / у: 3

b после присваивания 255: 255 -- без потери данных.

Ь после присваивания 257: 1 — с потерей данных.i

s после    присваивания    32000:    32000    --    без потери данных,

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату