C# 4.0: полное руководство | страница 57



>

>    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 без потери данных,

>    u = 32000;

>    s = (short) u;

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


>    // Приведение типа uint к типу short с потерей данных,

>    u = 64000;

>    s = (short)u;

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

>    Console.WriteLine();


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

>    l = 64000;

>    u = (uint)l;

>    Console.WriteLine("и после присваивания 64000: " + u + " -- без потери данных.");


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

>    l = -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 -- без потери данных.

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


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

>s после    присваивания    64000:    -1536    --    с потерей данных.


>u после-присваивания    64000:    64000    —    без потери данных,

>u после    присваивания    -12: 4294967284    -- с потерей данных.


>ch после присваивания 88: X


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

Когда переменной b присваивается значение 255, то информация не теряется, поскольку это значение входит в диапазон представления чисел для типа byte. Но когда переменной b присваивается значение 257, то часть информации теряется, поскольку это значение превышает диапазон представления чисел для типа byte. Приведение типов требуется в обоих случаях, поскольку неявное преобразование типа int в тип byte невозможно.