Выбрать главу

Простейший подход предусматривает определение большого числового значения в виде текстового литерала, который затем может быть преобразован в переменную BigInteger посредством статического метода Parse(). При желании можно также передавать байтовый массив непосредственно конструктору класса BigInteger.

На заметку! После того как переменной BigInteger присвоено значение, модифицировать ее больше нельзя, т.к. это неизменяемые данные. Тем не менее, в классе BigInteger определено несколько членов, которые возвращают новые объекты BigInteger на основе модификаций данных (такие как статический метод Multiply(), используемый в следующем примере кода).

В любом случае после определения переменной BigInteger вы обнаружите, что в этом классе определены члены, похожие на члены в других внутренних типах данных C# (например, float либо int). Вдобавок в классе BigInteger определен ряд статических членов, которые позволяют применять к переменным BigInteger базовые математические операции (наподобие сложения и умножения). Взгляните на пример работы с классом BigInteger:

static void UseBigInteger()

{

  Console.WriteLine("=> Use BigInteger:");

  BigInteger biggy =

    BigInteger.Parse("9999999999999999999999999999999999999999999999");

  Console.WriteLine("Value of biggy is {0}", biggy);

  Console.WriteLine("Is biggy an even value?: {0}", biggy.IsEven);

  Console.WriteLine("Is biggy a power of two?: {0}", biggy.IsPowerOfTwo);

  BigInteger reallyBig = BigInteger.Multiply(biggy,

    BigInteger.Parse("8888888888888888888888888888888888888888888"));

  Console.WriteLine("Value of reallyBig is {0}", reallyBig);

}

Важно отметить, что тип данных BigInteger реагирует на внутренние математические операции С#, такие как +, - и *. Следовательно, вместо вызова метода BigInteger.Multiply() для перемножения двух больших чисел можно использовать такой код:

BigInteger reallyBig2 = biggy * reallyBig;

К настоящему моменту вы должны понимать, что ключевые слова С#, представляющие базовые типы данных, имеют соответствующие типы в библиотеках базовых классов .NET Core, каждый из которых предлагает фиксированную функциональность. Хотя абсолютно все члены этих типов данных в книге подробно не рассматриваются, имеет смысл изучить их самостоятельно. Подробные описания разнообразных типов данных .NET Core можно найти в документации по .NET Core — скорее всего, вы будете удивлены объемом их встроенной функциональности.

Использование разделителей групп цифр (нововведение в версии 7.0)

Временами при присваивании числовой переменной крупных чисел цифр оказывается больше, чем способен отслеживать глаз. В версии C# 7.0 был введен разделитель групп цифр в виде символа подчеркивания (_) для данных int, long, decimal, double или шестнадцатеричных типов. Версия C# 7.2 позволяет шестнадцатеричным значениям (и рассматриваемым далее новым двоичным литералам) после открывающего объявления начинаться с символа подчеркивания. Ниже представлен пример применения нового разделителя групп цифр:

static void DigitSeparators()

{

  Console.WriteLine("=> Use Digit Separators:");

  Console.Write("Integer:");       // Целое

  Console.WriteLine(123_456);

  Console.Write("Long:");          // Длинное целое

  Console.WriteLine(123_456_789L);

  Console.Write("Float:");         // С плавающей точкой

  Console.WriteLine(123_456.1234F);

  Console.Write("Double:");        // С плавающей точкой двойной точности

  Console.WriteLine(123_456.12);

  Console.Write("Decimaclass="underline" ");       // Десятичное

  Console.WriteLine(123_456.12M);

                    // Обновление в версии 7.2: шестнадцатеричное значение

                    // может начинаться с символа _

  Console.Write("Hex:");

  Console.WriteLine(0x_00_00_FF);  // Шестнадцатеричное

}

Использование двоичных литералов (нововведение в версии 7.0/7.2)

В версии C# 7.0 появился новый литерал для двоичных значений, которые представляют, скажем, битовые маски. Новый разделитель групп цифр работает с двоичными литералами, а в версии C# 7.2 разрешено начинать двоичные и шестнадцатеричные числа начинать с символа подчеркивания. Теперь двоичные числа можно записывать ожидаемым образом, например:

0b_0001_0000

Вот метод, в котором иллюстрируется использование новых литералов с разделителем групп цифр: