48 lines
1.6 KiB
C#
48 lines
1.6 KiB
C#
|
using System;
|
|||
|
|
|||
|
/*
|
|||
|
* "Ядерный Ганди" и аримфметическое переполнение
|
|||
|
*/
|
|||
|
class Program
|
|||
|
{
|
|||
|
static void Main()
|
|||
|
{
|
|||
|
#region Для целочисленных типов данных
|
|||
|
byte agression = 1;
|
|||
|
|
|||
|
byte democracyModifier = 2;
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
// Если вычесть из 1 2, то будет 255 а не 0, это арифметическое переполнение
|
|||
|
// и слово checked это проверяет - uncehcked {} выключает проверку переполнения
|
|||
|
agression = checked((byte)(agression - democracyModifier)); // Служащее преобразование данных
|
|||
|
Console.WriteLine(agression);
|
|||
|
}
|
|||
|
catch (OverflowException)
|
|||
|
{
|
|||
|
Console.WriteLine("Error");
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region Для дробных типов данных
|
|||
|
double a = 1.0 / 0.0;
|
|||
|
|
|||
|
Console.WriteLine(double.IsInfinity(a)); // output: True
|
|||
|
|
|||
|
double b = 0.0 / 0.0;
|
|||
|
|
|||
|
Console.WriteLine(double.IsNaN(b)); // output: True
|
|||
|
|
|||
|
double c = double.MaxValue + double.MinValue;
|
|||
|
|
|||
|
Console.WriteLine(double.IsInfinity(c)); // output: True
|
|||
|
|
|||
|
decimal aa = decimal.MaxValue;
|
|||
|
decimal bb = decimal.MaxValue;
|
|||
|
// *Для арифметических операндов типа decimal переполнение всегда показывает исключение
|
|||
|
// decimal cc = unchecked(a + b);
|
|||
|
#endregion
|
|||
|
Console.ReadKey();
|
|||
|
}
|
|||
|
}
|