>
> i = (int)(x / y) ;
> 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 без потери данных,
> 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 невозможно.
Когда переменной s типа short присваивается значение 32 000 переменной и типа uint, потери данных не происходит, поскольку это значение входит в диапазон представления чисел для типа short. Но в следующей операции присваивания переменная и имеет значение 64 000, которое оказывается вне диапазона представления чисел для типа short, и поэтому данные теряются. Приведение типов требуется в обоих случаях, поскольку неявное преобразование типа uint в тип short невозможно.
Далее переменной и присваивается значение 64 000 переменной 1 типа long. В этом случае данные не теряются, поскольку значение 64 000 оказывается вне диапазона представления чисел для типа uint. Но когда переменной и присваивается значение -12, данные теряются, поскольку отрицательные числа также оказываются вне диапазона представления чисел для типа uint. Приведение типов требуется в обоих случаях, так как неявное преобразование типа long в тип uint невозможно.