BigInteger Constructors

Definition

Инициализирует новый экземпляр структуры BigInteger.Initializes a new instance of the BigInteger structure.

Overloads

BigInteger(Byte[])

Инициализирует новый экземпляр структуры BigInteger, используя значения в массиве типа byte.Initializes a new instance of the BigInteger structure using the values in a byte array.

BigInteger(Decimal)

Инициализирует новый экземпляр структуры BigInteger, используя значение Decimal.Initializes a new instance of the BigInteger structure using a Decimal value.

BigInteger(Double)

Инициализирует новый экземпляр структуры BigInteger, используя значение с плавающей запятой двойной точности.Initializes a new instance of the BigInteger structure using a double-precision floating-point value.

BigInteger(Int32)

Инициализирует новый экземпляр структуры BigInteger, используя 32-разрядное знаковое целое число.Initializes a new instance of the BigInteger structure using a 32-bit signed integer value.

BigInteger(Int64)

Инициализирует новый экземпляр структуры BigInteger, используя 64-разрядное целое число со знаком.Initializes a new instance of the BigInteger structure using a 64-bit signed integer value.

BigInteger(Single)

Инициализирует новый экземпляр структуры BigInteger, используя значение с плавающей запятой одиночной точности.Initializes a new instance of the BigInteger structure using a single-precision floating-point value.

BigInteger(UInt32)

Инициализирует новый экземпляр структуры BigInteger, используя 32-разрядное целое число без знака.Initializes a new instance of the BigInteger structure using an unsigned 32-bit integer value.

BigInteger(UInt64)

Инициализирует новый экземпляр структуры BigInteger, используя 64-разрядное целое число без знака.Initializes a new instance of the BigInteger structure with an unsigned 64-bit integer value.

BigInteger(ReadOnlySpan<Byte>, Boolean, Boolean)

Инициализирует новый экземпляр структуры BigInteger, используя значения в диапазоне байтов, доступном только для чтения, и при необходимости указывая кодировку подписи и порядок следования байтов.Initializes a new instance of the BigInteger structure using the values in a read-only span of bytes, and optionally indicating the signing encoding and the endianness byte order.

BigInteger(Byte[])

Important

This API is not CLS-compliant.

Инициализирует новый экземпляр структуры BigInteger, используя значения в массиве типа byte.Initializes a new instance of the BigInteger structure using the values in a byte array.

public:
 BigInteger(cli::array <System::Byte> ^ value);
[System.CLSCompliant(false)]
public BigInteger (byte[] value);
new System.Numerics.BigInteger : byte[] -> System.Numerics.BigInteger
Public Sub New (value As Byte())

Parameters

value
Byte[]

Массив значений типа byte в прямом порядке байтов.An array of byte values in little-endian order.

Attributes

Exceptions

Параметр value равен null.value is null.

Examples

В следующем примере создается экземпляр BigInteger объекта из 5-элементного массива байтов, значение которого равно {5, 4, 3, 2, 1}.The following example instantiates a BigInteger object from a 5-element byte array whose value is {5, 4, 3, 2, 1}. Затем в консоли отображается значение BigInteger, представленное в виде десятичных и шестнадцатеричных чисел.It then displays the BigInteger value, represented as both decimal and hexadecimal numbers, to the console. Сравнение входного массива с выходным текстом делает ясно, почему эта перегрузка конструктора BigInteger класса создает объект BigInteger, значение которого равно 4328719365 (или 0x102030405).A comparison of the input array with the text output makes it clear why this overload of the BigInteger class constructor creates a BigInteger object whose value is 4328719365 (or 0x102030405). Первый элемент массива байтов, значение которого равно 5, определяет значение байта самого нижнего порядка BigInteger объекта, который является 0x05.The first element of the byte array, whose value is 5, defines the value of the lowest-order byte of the BigInteger object, which is 0x05. Второй элемент массива байтов, значение которого равно 4, определяет значение второго байта BigInteger объекта, который является 0x04, и т. д.The second element of the byte array, whose value is 4, defines the value of the second byte of the BigInteger object, which is 0x04, and so on.

byte[] bytes = { 5, 4, 3, 2, 1 };
BigInteger number = new BigInteger(bytes);
Console.WriteLine("The value of number is {0} (or 0x{0:x}).", number);
// The example displays the following output:
//    The value of number is 4328719365 (or 0x102030405).
Dim bytes() As Byte = { 5, 4, 3, 2, 1 }
Dim number As New BigInteger(bytes)
Console.WriteLine("The value of number is {0} (or 0x{0:x}).", number) 
' The example displays the following output:
'    The value of number is 4328719365 (or 0x102030405).   

В следующем примере создается положительное и отрицательное BigInteger значение, передается методу ToByteArray, а затем восстанавливаются исходные значения BigInteger из полученного массива байтов.The following example instantiates a positive and a negative BigInteger value, passes them to the ToByteArray method, and then restores the original BigInteger values from the resulting byte array. Обратите внимание, что два значения представлены одинаковыми массивами байтов.Note that the two values are represented by identical byte arrays. Единственное различие между ними — это наиболее важный бит последнего элемента в массиве байтов.The only difference between them is in the most significant bit of the last element in the byte array. Этот бит задан (значение байта — 0xFF), если массив создается на основе отрицательного BigInteger значения.This bit is set (the value of the byte is 0xFF) if the array is created from a negative BigInteger value. Бит не задан (значение байта равно нулю), если массив создается на основе положительного BigInteger значения.The bit is not set (the value of the byte is zero), if the array is created from a positive BigInteger value.

// Instantiate BigInteger values.
BigInteger positiveValue = BigInteger.Parse("4713143110832790377889");
BigInteger negativeValue = BigInteger.Add(-Int64.MaxValue, -60000);
BigInteger positiveValue2, negativeValue2;

// Create two byte arrays.
byte[] positiveBytes = positiveValue.ToByteArray();
byte[] negativeBytes = negativeValue.ToByteArray();

// Instantiate new BigInteger from negativeBytes array.
Console.Write("Converted {0:N0} to the byte array ", negativeValue);
foreach (byte byteValue in negativeBytes)
   Console.Write("{0:X2} ", byteValue);
Console.WriteLine();
negativeValue2 = new BigInteger(negativeBytes);
Console.WriteLine("Converted the byte array to {0:N0}", negativeValue2);
Console.WriteLine();

// Instantiate new BigInteger from positiveBytes array.
Console.Write("Converted {0:N0} to the byte array ", positiveValue);
foreach (byte byteValue in positiveBytes)
   Console.Write("{0:X2} ", byteValue);
Console.WriteLine();
positiveValue2 = new BigInteger(positiveBytes);
Console.WriteLine("Converted the byte array to {0:N0}", positiveValue2);
Console.WriteLine();
// The example displays the following output:
//    Converted -9,223,372,036,854,835,807 to the byte array A1 15 FF FF FF FF FF 7F FF
//    Converted the byte array to -9,223,372,036,854,835,807
//
//    Converted 4,713,143,110,832,790,377,889 to the byte array A1 15 FF FF FF FF FF 7F FF 00
//    Converted the byte array to 4,713,143,110,832,790,377,889
' Instantiate BigInteger values.
Dim positiveValue As BigInteger = BigInteger.Parse("4713143110832790377889")
Dim negativeValue As BigInteger = BigInteger.Add(-Int64.MaxValue, -60000) 
Dim positiveValue2, negativeValue2 As BigInteger

' Create two byte arrays.
Dim positiveBytes() As Byte = positiveValue.ToByteArray()
Dim negativeBytes() As Byte = negativeValue.ToByteArray()

' Instantiate new BigInteger from negativeBytes array.
Console.Write("Converted {0:N0} to the byte array ", negativeValue)
For Each byteValue As Byte In negativeBytes
   Console.Write("{0:X2} ", byteValue)
Next 
Console.WriteLine()
negativeValue2 = New BigInteger(negativeBytes)
Console.WriteLine("Converted the byte array to {0:N0}", negativeValue2)
Console.WriteLine()

' Instantiate new BigInteger from positiveBytes array.
Console.Write("Converted {0:N0} to the byte array ", positiveValue)
For Each byteValue As Byte In positiveBytes
   Console.Write("{0:X2} ", byteValue)
Next 
Console.WriteLine()
positiveValue2 = New BigInteger(positiveBytes)
Console.WriteLine("Converted the byte array to {0:N0}", positiveValue2)
Console.WriteLine()
' The example displays the following output:
'    Converted -9,223,372,036,854,835,807 to the byte array A1 15 FF FF FF FF FF 7F FF
'    Converted the byte array to -9,223,372,036,854,835,807
'    
'    Converted 4,713,143,110,832,790,377,889 to the byte array A1 15 FF FF FF FF FF 7F FF 00
'    Converted the byte array to 4,713,143,110,832,790,377,889

В следующем примере показано, как убедиться, что положительное значение не является неправильным экземпляром как отрицательное значение, добавив байт, значение которого равно нулю, в конец массива.The following example illustrates how to make sure that a positive value is not incorrectly instantiated as a negative value by adding a byte whose value is zero to the end of the array.

ulong originalNumber = UInt64.MaxValue;
byte[] bytes = BitConverter.GetBytes(originalNumber);
if (originalNumber > 0 && (bytes[bytes.Length - 1] & 0x80) > 0)
{
   byte[] temp = new byte[bytes.Length];
   Array.Copy(bytes, temp, bytes.Length);
   bytes = new byte[temp.Length + 1];
   Array.Copy(temp, bytes, temp.Length);
}

BigInteger newNumber = new BigInteger(bytes);
Console.WriteLine("Converted the UInt64 value {0:N0} to {1:N0}.",
                  originalNumber, newNumber);
// The example displays the following output:
//    Converted the UInt64 value 18,446,744,073,709,551,615 to 18,446,744,073,709,551,615.
Dim originalNumber As ULong = UInt64.MaxValue
' Convert an unsigned integer to a byte array.
Dim bytes() As Byte = BitConverter.GetBytes(originalNumber)
' Determine whether the MSB of the highest-order byte is set.
If originalNumber > 0 And (bytes(bytes.Length - 1) And &h80) > 0 Then
   ' If the MSB is set, add one zero-value byte to the end of the array.
   ReDim Preserve bytes(bytes.Length)
End If

Dim newNumber As New BigInteger(bytes)
Console.WriteLine("Converted the UInt64 value {0:N0} to {1:N0}.", 
                  originalNumber, newNumber) 
' The example displays the following output:
'    Converted the UInt64 value 18,446,744,073,709,551,615 to 18,446,744,073,709,551,615.

Remarks

Отдельные байты в массиве value должны находиться в порядке с прямым порядком следования, начиная с самого низкого порядка и заканчивая большим порядком байтов.The individual bytes in the value array should be in little-endian order, from lowest-order byte to highest-order byte. Например, числовое значение 1 000 000 000 000 представлено, как показано в следующей таблице.For example, the numeric value 1,000,000,000,000 is represented as shown in the following table:

Шестнадцатеричная строкаHexadecimal string E8D4A51000E8D4A51000
Массив байтов (сначала минимальный индекс)Byte array (lowest index first) 00 10 A5 D4 E8 0000 10 A5 D4 E8 00

Большинство методов, которые преобразуют числовые значения в байтовые массивы, такие как BigInteger.ToByteArray и BitConverter.GetBytes, возвращают байтовые массивы в порядке с прямым порядком байтов.Most methods that convert numeric values to byte arrays, such as BigInteger.ToByteArray and BitConverter.GetBytes, return byte arrays in little-endian order.

Конструктор принимает положительные значения в массиве байтов для использования представления знака и величины, а отрицательные значения — для использования представления дополнения двух.The constructor expects positive values in the byte array to use sign-and-magnitude representation, and negative values to use two's complement representation. Иными словами, если установлен старший бит старших байтов в value, полученное BigInteger значение будет отрицательным.In other words, if the highest-order bit of the highest-order byte in value is set, the resulting BigInteger value is negative. В зависимости от источника массива байтов это может привести к тому, что положительное значение будет ошибочно интерпретировано как отрицательное значение.Depending on the source of the byte array, this may cause a positive value to be misinterpreted as a negative value. Массивы байтов обычно создаются следующими способами.Byte arrays are typically generated in the following ways:

  • Путем вызова метода BigInteger.ToByteArray.By calling the BigInteger.ToByteArray method. Поскольку этот метод возвращает массив байтов с старшим битом старших байтов в массиве, равным нулю для положительных значений, не существует вероятность неправильной интерпретации положительного значения как отрицательного.Because this method returns a byte array with the highest-order bit of the highest-order byte in the array set to zero for positive values, there is no chance of misinterpreting a positive value as negative. Неизмененные массивы байтов, созданные методом ToByteArray, всегда успешно проходят циклический обмен, когда они передаются в конструктор BigInteger(Byte[]).Unmodified byte arrays created by the ToByteArray method always successfully round-trip when they are passed to the BigInteger(Byte[]) constructor.

  • Путем вызова метода BitConverter.GetBytes и передачи ему целого числа со знаком в качестве параметра.By calling the BitConverter.GetBytes method and passing it a signed integer as a parameter. Поскольку целые числа со знаком обрабатывают как представление знака и величины, так и представление дополнения двух, не существует вероятность неправильной интерпретации положительного значения как отрицательного.Because signed integers handle both sign-and-magnitude representation and two's complement representation, there is no chance of misinterpreting a positive value as negative.

  • Путем вызова метода BitConverter.GetBytes и передачи ему целого числа без знака в качестве параметра.By calling the BitConverter.GetBytes method and passing it an unsigned integer as a parameter. Так как целые числа без знака представлены только по величине, положительные значения могут быть неверно интерпретированы как отрицательные значения.Because unsigned integers are represented by their magnitude only, positive values can be misinterpreted as negative values. Чтобы предотвратить такую неподобную интерпретацию, можно добавить в конец массива значение нулевого байта.To prevent this misinterpretation, you can add a zero-byte value to the end of the array. Иллюстрация приведена в примере в следующем разделе.The example in the next section provides an illustration.

  • Путем создания массива байтов динамически или статически без обязательного вызова любого из предыдущих методов или путем изменения существующего массива байтов.By creating a byte array either dynamically or statically without necessarily calling any of the previous methods, or by modifying an existing byte array. Чтобы избежать неправильной интерпретации положительных значений как отрицательных значений, можно добавить в конец массива значение нулевого байта.To prevent positive values from being misinterpreted as negative values, you can add a zero-byte value to the end of the array.

Если value является пустым массивом Byte, новый объект BigInteger инициализируется значением BigInteger.Zero.If value is an empty Byte array, the new BigInteger object is initialized to a value of BigInteger.Zero. Если value null, конструктор создает исключение ArgumentNullException.If value is null, the constructor throws an ArgumentNullException.

See also

BigInteger(Decimal)

Инициализирует новый экземпляр структуры BigInteger, используя значение Decimal.Initializes a new instance of the BigInteger structure using a Decimal value.

public:
 BigInteger(System::Decimal value);
public BigInteger (decimal value);
new System.Numerics.BigInteger : decimal -> System.Numerics.BigInteger
Public Sub New (value As Decimal)

Parameters

value
Decimal

Десятичное число.A decimal number.

Examples

В следующем примере показано использование конструктора BigInteger(Decimal) для создания экземпляра объекта BigInteger.The following example illustrates the use of the BigInteger(Decimal) constructor to instantiate a BigInteger object. Он определяет массив значений Decimal, а затем передает каждое значение в конструктор BigInteger(Decimal).It defines an array of Decimal values, and then passes each value to the BigInteger(Decimal) constructor. Обратите внимание, что Decimal значение усекается, а не округляется, когда оно назначается объекту BigInteger.Note that the Decimal value is truncated instead of rounded when it is assigned to the BigInteger object.

decimal[] decimalValues = { -1790.533m, -15.1514m, 18903.79m, 9180098.003m };
foreach (decimal decimalValue in decimalValues)
{
   BigInteger number = new BigInteger(decimalValue);
   Console.WriteLine("Instantiated BigInteger value {0} from the Decimal value {1}.",
                     number, decimalValue);
}
// The example displays the following output:
//    Instantiated BigInteger value -1790 from the Decimal value -1790.533.
//    Instantiated BigInteger value -15 from the Decimal value -15.1514.
//    Instantiated BigInteger value 18903 from the Decimal value 18903.79.
//    Instantiated BigInteger value 9180098 from the Decimal value 9180098.003.
Dim decimalValues() As Decimal = { -1790.533d, -15.1514d, 18903.79d, 9180098.003d }
For Each decimalValue As Decimal In decimalValues
   Dim number As New BigInteger(decimalValue)
   Console.WriteLine("Instantiated BigInteger value {0} from the Decimal value {1}.",
                     number, decimalValue)
Next                 
' The example displays the following output:
'    Instantiated BigInteger value -1790 from the Decimal value -1790.533.
'    Instantiated BigInteger value -15 from the Decimal value -15.1514.
'    Instantiated BigInteger value 18903 from the Decimal value 18903.79.
'    Instantiated BigInteger value 9180098 from the Decimal value 9180098.003.

Remarks

Результат вызова этого конструктора идентичен явному присвоению Decimal значения переменной BigInteger.The result of calling this constructor is identical to explicitly assigning a Decimal value to a BigInteger variable.

Вызов этого конструктора может привести к потере данных. При создании объекта BigInteger дробная часть value усекается.Calling this constructor can cause data loss; any fractional part of value is truncated when instantiating a BigInteger object.

BigInteger(Double)

Инициализирует новый экземпляр структуры BigInteger, используя значение с плавающей запятой двойной точности.Initializes a new instance of the BigInteger structure using a double-precision floating-point value.

public:
 BigInteger(double value);
public BigInteger (double value);
new System.Numerics.BigInteger : double -> System.Numerics.BigInteger
Public Sub New (value As Double)

Parameters

value
Double

Значение с плавающей точкой двойной точности.A double-precision floating-point value.

Exceptions

value имеет значение NaN, NegativeInfinity или PositiveInfinity.value is NaN, NegativeInfinity, or PositiveInfinity.

Examples

В следующем примере показано использование конструктора BigInteger(Double) для создания экземпляра объекта BigInteger.The following example illustrates the use of the BigInteger(Double) constructor to instantiate a BigInteger object. Кроме того, здесь показана вероятность потери точности, которая может возникнуть при использовании типа данных Double.It also illustrates the loss of precision that may occur when you use the Double data type. Doubleу присваивается большое значение, которое затем присваивается объекту BigInteger.A Double is assigned a large value, which is then assigned to a BigInteger object. Как видно из выходных данных, это назначение включает в себя потери точности.As the output shows, this assignment involves a loss of precision. Затем оба значения увеличиваются на единицу.Both values are then incremented by one. Выходные данные показывают, что объект BigInteger отражает измененное значение, а объект Double — нет.The output shows that the BigInteger object reflects the changed value, whereas the Double object does not.

// Create a BigInteger from a large double value.
double doubleValue = -6e20;
BigInteger bigIntValue = new BigInteger(doubleValue);
Console.WriteLine("Original Double value: {0:N0}", doubleValue);
Console.WriteLine("Original BigInteger value: {0:N0}", bigIntValue);
// Increment and then display both values.
doubleValue++;
bigIntValue += BigInteger.One;
Console.WriteLine("Incremented Double value: {0:N0}", doubleValue);
Console.WriteLine("Incremented BigInteger value: {0:N0}", bigIntValue);
// The example displays the following output:
//    Original Double value: -600,000,000,000,000,000,000
//    Original BigInteger value: -600,000,000,000,000,000,000
//    Incremented Double value: -600,000,000,000,000,000,000
//    Incremented BigInteger value: -599,999,999,999,999,999,999
' Create a BigInteger from a large double value.
Dim doubleValue As Double = -6e20
Dim bigIntValue As New BigInteger(doubleValue)
Console.WriteLine("Original Double value: {0:N0}", doubleValue)
Console.WriteLine("Original BigInteger value: {0:N0}", bigIntValue)
' Increment and then display both values.
doubleValue += 1
bigIntValue += BigInteger.One
Console.WriteLine("Incremented Double value: {0:N0}", doubleValue)
Console.WriteLine("Incremented BigInteger value: {0:N0}", bigIntValue)
' The example displays the following output:
'    Original Double value: -600,000,000,000,000,000,000
'    Original BigInteger value: -600,000,000,000,000,000,000
'    Incremented Double value: -600,000,000,000,000,000,000
'    Incremented BigInteger value: -599,999,999,999,999,999,999

Remarks

При создании объекта BigInteger дробная часть параметра value усекается.Any fractional part of the value parameter is truncated when instantiating a BigInteger object.

Из-за нехватки точности Double типа данных вызов этого конструктора может привести к потере данных.Because of the lack of precision of the Double data type, calling this constructor can cause data loss.

BigInteger значение, полученное в результате вызова этого конструктора, идентично значению, полученному в результате явного присваивания Double значения BigInteger.The BigInteger value that results from calling this constructor is identical to the value that results from explicitly assigning a Double value to a BigInteger.

BigInteger(Int32)

Инициализирует новый экземпляр структуры BigInteger, используя 32-разрядное знаковое целое число.Initializes a new instance of the BigInteger structure using a 32-bit signed integer value.

public:
 BigInteger(int value);
public BigInteger (int value);
new System.Numerics.BigInteger : int -> System.Numerics.BigInteger
Public Sub New (value As Integer)

Parameters

value
Int32

32-разрядное целое число со знаком.A 32-bit signed integer.

Examples

В следующем примере вызывается конструктор BigInteger(Int32) для создания экземпляра BigInteger значений из массива 32-разрядных целых чисел.The following example calls the BigInteger(Int32) constructor to instantiate BigInteger values from an array of 32-bit integers. Он также использует неявное преобразование для присвоения каждого 32-разрядного целого значения переменной BigInteger.It also uses implicit conversion to assign each 32-bit integer value to a BigInteger variable. Затем эти два значения сравниваются, чтобы определить, что результирующие BigInteger значения одинаковы.It then compares the two values to establish that the resulting BigInteger values are the same.

int[] integers = { Int32.MinValue, -10534, -189, 0, 17, 113439,
                   Int32.MaxValue };
BigInteger constructed, assigned;

foreach (int number in integers)
{
   constructed = new BigInteger(number);
   assigned = number;
   Console.WriteLine("{0} = {1}: {2}", constructed, assigned,
                     constructed.Equals(assigned));
}
// The example displays the following output:
//       -2147483648 = -2147483648: True
//       -10534 = -10534: True
//       -189 = -189: True
//       0 = 0: True
//       17 = 17: True
//       113439 = 113439: True
//       2147483647 = 2147483647: True
Dim integers() As Integer = { Int32.MinValue, -10534, -189, 0, 17, 113439,
                              Int32.MaxValue }
Dim constructed, assigned As BigInteger

For Each number As Integer In integers
   constructed = New BigInteger(number)
   assigned = number
   Console.WriteLine("{0} = {1}: {2}", constructed, assigned, 
                     constructed.Equals(assigned)) 
Next
' The example displays the following output:
'       -2147483648 = -2147483648: True
'       -10534 = -10534: True
'       -189 = -189: True
'       0 = 0: True
'       17 = 17: True
'       113439 = 113439: True
'       2147483647 = 2147483647: True

Remarks

При создании объекта BigInteger с помощью этого конструктора потери точности не происходит.There is no loss of precision when instantiating a BigInteger object by using this constructor.

BigInteger значение, полученное в результате вызова этого конструктора, идентично значению, полученному в результате присвоения Int32ного значения BigInteger.The BigInteger value that results from calling this constructor is identical to the value that results from assigning an Int32 value to a BigInteger.

Структура BigInteger не включает конструкторы с параметром типа Byte, Int16, SByteили UInt16.The BigInteger structure does not include constructors with a parameter of type Byte, Int16, SByte, or UInt16. Однако тип Int32 поддерживает неявное преобразование 8-разрядных и 16-разрядных целых чисел со знаком в 32-разрядные целые числа.However, the Int32 type supports the implicit conversion of 8-bit and 16-bit signed and unsigned integers to signed 32-bit integers. В результате этот конструктор вызывается, если value является одним из четырех целочисленных типов.As a result, this constructor is called if value is any one of these four integral types.

BigInteger(Int64)

Инициализирует новый экземпляр структуры BigInteger, используя 64-разрядное целое число со знаком.Initializes a new instance of the BigInteger structure using a 64-bit signed integer value.

public:
 BigInteger(long value);
public BigInteger (long value);
new System.Numerics.BigInteger : int64 -> System.Numerics.BigInteger
Public Sub New (value As Long)

Parameters

value
Int64

64-разрядное целое число со знаком.A 64-bit signed integer.

Examples

В следующем примере вызывается конструктор BigInteger(Int64) для создания экземпляра BigInteger значений из массива 64-разрядных целых чисел.The following example calls the BigInteger(Int64) constructor to instantiate BigInteger values from an array of 64-bit integers. Он также использует неявное преобразование для присвоения каждого 64-разрядного целого значения переменной BigInteger.It also uses implicit conversion to assign each 64-bit integer value to a BigInteger variable. Затем эти два значения сравниваются, чтобы определить, что результирующие BigInteger значения одинаковы.It then compares the two values to establish that the resulting BigInteger values are the same.

long[] longs = { Int64.MinValue, -10534, -189, 0, 17, 113439,
                 Int64.MaxValue };
BigInteger constructed, assigned;

foreach (long number in longs)
{
   constructed = new BigInteger(number);
   assigned = number;
   Console.WriteLine("{0} = {1}: {2}", constructed, assigned,
                     constructed.Equals(assigned));
}
// The example displays the following output:
//       -2147483648 = -2147483648: True
//       -10534 = -10534: True
//       -189 = -189: True
//       0 = 0: True
//       17 = 17: True
//       113439 = 113439: True
//       2147483647 = 2147483647: True
Dim longs() As Long = { Int64.MinValue, -10534, -189, 0, 17, 113439,
                              Int64.MaxValue }
Dim constructed, assigned As BigInteger

For Each number As Long In longs
   constructed = New BigInteger(number)
   assigned = number
   Console.WriteLine("{0} = {1}: {2}", constructed, assigned, 
                     constructed.Equals(assigned)) 
Next
' The example displays the following output:
'       -2147483648 = -2147483648: True
'       -10534 = -10534: True
'       -189 = -189: True
'       0 = 0: True
'       17 = 17: True
'       113439 = 113439: True
'       2147483647 = 2147483647: True

Remarks

При создании объекта BigInteger с помощью этого конструктора потери точности не происходит.There is no loss of precision when instantiating a BigInteger object by using this constructor.

BigInteger значение, полученное в результате вызова этого конструктора, идентично значению, полученному в результате присвоения Int64ного значения BigInteger.The BigInteger value that results from calling this constructor is identical to the value that results from assigning an Int64 value to a BigInteger.

BigInteger(Single)

Инициализирует новый экземпляр структуры BigInteger, используя значение с плавающей запятой одиночной точности.Initializes a new instance of the BigInteger structure using a single-precision floating-point value.

public:
 BigInteger(float value);
public BigInteger (float value);
new System.Numerics.BigInteger : single -> System.Numerics.BigInteger
Public Sub New (value As Single)

Parameters

value
Single

Значение с плавающей точкой одиночной точности.A single-precision floating-point value.

Exceptions

value имеет значение NaN, NegativeInfinity или PositiveInfinity.value is NaN, NegativeInfinity, or PositiveInfinity.

Examples

В следующем примере показано использование конструктора BigInteger(Single) для создания экземпляра объекта BigInteger.The following example illustrates the use of the BigInteger(Single) constructor to instantiate a BigInteger object. Кроме того, здесь показана вероятность потери точности, которая может возникнуть при использовании типа данных Single.It also illustrates the loss of precision that may occur when you use the Single data type. Singleу присваивается большое отрицательное значение, которое затем назначается объекту BigInteger.A Single is assigned a large negative value, which is then assigned to a BigInteger object. Как видно из выходных данных, это назначение включает в себя потери точности.As the output shows, this assignment involves a loss of precision. Затем оба значения увеличиваются на единицу.Both values are then incremented by one. Выходные данные показывают, что объект BigInteger отражает измененное значение, а объект Single — нет.The output shows that the BigInteger object reflects the changed value, whereas the Single object does not.

// Create a BigInteger from a large negative Single value
float negativeSingle = Single.MinValue;
BigInteger negativeNumber = new BigInteger(negativeSingle);

Console.WriteLine(negativeSingle.ToString("N0"));
Console.WriteLine(negativeNumber.ToString("N0"));

negativeSingle++;
negativeNumber++;

Console.WriteLine(negativeSingle.ToString("N0"));
Console.WriteLine(negativeNumber.ToString("N0"));
// The example displays the following output:
//       -340,282,300,000,000,000,000,000,000,000,000,000,000
//       -340,282,346,638,528,859,811,704,183,484,516,925,440
//       -340,282,300,000,000,000,000,000,000,000,000,000,000
//       -340,282,346,638,528,859,811,704,183,484,516,925,439
' Create a BigInteger from a large negative Single value
Dim negativeSingle As Single = Single.MinValue
Dim negativeNumber As New BigInteger(negativeSingle)

Console.WriteLine(negativeSingle.ToString("N0"))
Console.WriteLine(negativeNumber.ToString("N0"))

negativeSingle += 1
negativeNumber += 1
Console.WriteLine(negativeSingle.ToString("N0"))
Console.WriteLine(negativeNumber.ToString("N0"))
' The example displays the following output:
'       -340,282,300,000,000,000,000,000,000,000,000,000,000
'       -340,282,346,638,528,859,811,704,183,484,516,925,440
'       -340,282,300,000,000,000,000,000,000,000,000,000,000
'       -340,282,346,638,528,859,811,704,183,484,516,925,439

Remarks

При создании объекта BigInteger дробная часть параметра value усекается.Any fractional part of the value parameter is truncated when instantiating a BigInteger object.

Из-за нехватки точности Single типа данных вызов этого конструктора может привести к утрате данных.Because of the lack of precision of the Single data type, calling this constructor can result in data loss.

BigInteger значение, полученное в результате вызова этого конструктора, идентично значению, полученному в результате явного присваивания Single значения BigInteger.The BigInteger value that results from calling this constructor is identical to the value that results from explicitly assigning a Single value to a BigInteger.

BigInteger(UInt32)

Important

This API is not CLS-compliant.

CLS-compliant alternative
System.Numerics.BigInteger.BigInteger(Int64)

Инициализирует новый экземпляр структуры BigInteger, используя 32-разрядное целое число без знака.Initializes a new instance of the BigInteger structure using an unsigned 32-bit integer value.

public:
 BigInteger(System::UInt32 value);
[System.CLSCompliant(false)]
public BigInteger (uint value);
new System.Numerics.BigInteger : uint32 -> System.Numerics.BigInteger
Public Sub New (value As UInteger)

Parameters

value
UInt32

32-разрядное целое значение без знака.An unsigned 32-bit integer value.

Attributes

Examples

В следующем примере используется конструктор BigInteger(UInt32) и оператор присваивания для инициализации BigInteger значений из массива беззнаковых 32-разрядных целых чисел.The following example uses the BigInteger(UInt32) constructor and an assignment statement to initialize BigInteger values from an array of unsigned 32-bit integers. Затем эти два значения сравниваются, чтобы продемонстрировать, что два метода инициализации BigIntegerного значения дают идентичные результаты.It then compares the two values to demonstrate that the two methods of initializing a BigInteger value produce identical results.

uint[] unsignedValues = { 0, 16704, 199365, UInt32.MaxValue };
foreach (uint unsignedValue in unsignedValues)
{
   BigInteger constructedNumber = new BigInteger(unsignedValue);
   BigInteger assignedNumber = unsignedValue;
   if (constructedNumber.Equals(assignedNumber))
      Console.WriteLine("Both methods create a BigInteger whose value is {0:N0}.",
                        constructedNumber);
   else
      Console.WriteLine("{0:N0} ≠ {1:N0}", constructedNumber, assignedNumber);
}
// The example displays the following output:
//    Both methods create a BigInteger whose value is 0.
//    Both methods create a BigInteger whose value is 16,704.
//    Both methods create a BigInteger whose value is 199,365.
//    Both methods create a BigInteger whose value is 4,294,967,295.
Dim unsignedValues() As UInteger = { 0, 16704, 199365, UInt32.MaxValue }
For Each unsignedValue As UInteger In unsignedValues
   Dim constructedNumber As New BigInteger(unsignedValue)
   Dim assignedNumber As BigInteger = unsignedValue
   If constructedNumber.Equals(assignedNumber) Then
      Console.WriteLine("Both methods create a BigInteger whose value is {0:N0}.",
                        constructedNumber)
   Else
      Console.WriteLine("{0:N0} ≠ {1:N0}", constructedNumber, assignedNumber)
   End If                         
Next
' The example displays the following output:
'    Both methods create a BigInteger whose value is 0.
'    Both methods create a BigInteger whose value is 16,704.
'    Both methods create a BigInteger whose value is 199,365.
'    Both methods create a BigInteger whose value is 4,294,967,295.

Remarks

При создании экземпляра BigInteger с помощью этого конструктора потери точности не происходит.There is no loss of precision when instantiating a BigInteger using this constructor.

BigInteger значение, полученное в результате вызова этого конструктора, идентично значению, полученному в результате присвоения UInt32ного значения BigInteger.The BigInteger value that results from calling this constructor is identical to the value that results from assigning a UInt32 value to a BigInteger.

BigInteger(UInt64)

Important

This API is not CLS-compliant.

CLS-compliant alternative
System.Numerics.BigInteger.BigInteger(Double)

Инициализирует новый экземпляр структуры BigInteger, используя 64-разрядное целое число без знака.Initializes a new instance of the BigInteger structure with an unsigned 64-bit integer value.

public:
 BigInteger(System::UInt64 value);
[System.CLSCompliant(false)]
public BigInteger (ulong value);
new System.Numerics.BigInteger : uint64 -> System.Numerics.BigInteger
Public Sub New (value As ULong)

Parameters

value
UInt64

64-разрядное целое число без знака.An unsigned 64-bit integer.

Attributes

Examples

В следующем примере конструктор BigInteger(UInt64) используется для создания экземпляра объекта BigInteger, значение которого равно MaxValue.The following example uses the BigInteger(UInt64) constructor to instantiate a BigInteger object whose value is equal to MaxValue.

ulong unsignedValue = UInt64.MaxValue;
BigInteger number = new BigInteger(unsignedValue);
Console.WriteLine(number.ToString("N0"));
// The example displays the following output:
//       18,446,744,073,709,551,615
Dim unsignedValue As ULong = UInt64.MaxValue
Dim number As New BigInteger(unsignedValue)
Console.WriteLine(number.ToString("N0"))       
' The example displays the following output:
'       18,446,744,073,709,551,615      

Remarks

При создании экземпляра BigInteger с помощью этого конструктора потери точности не происходит.There is no loss of precision when instantiating a BigInteger using this constructor.

BigInteger значение, полученное в результате вызова этого конструктора, идентично значению, полученному в результате присвоения UInt64ного значения BigInteger.The BigInteger value that results from calling this constructor is identical to the value that results from assigning a UInt64 value to a BigInteger.

BigInteger(ReadOnlySpan<Byte>, Boolean, Boolean)

Инициализирует новый экземпляр структуры BigInteger, используя значения в диапазоне байтов, доступном только для чтения, и при необходимости указывая кодировку подписи и порядок следования байтов.Initializes a new instance of the BigInteger structure using the values in a read-only span of bytes, and optionally indicating the signing encoding and the endianness byte order.

public BigInteger (ReadOnlySpan<byte> value, bool isUnsigned = false, bool isBigEndian = false);
new System.Numerics.BigInteger : ReadOnlySpan<byte> * bool * bool -> System.Numerics.BigInteger
Public Sub New (value As ReadOnlySpan(Of Byte), Optional isUnsigned As Boolean = false, Optional isBigEndian As Boolean = false)

Parameters

value
ReadOnlySpan<Byte>

Доступный только для чтения диапазон байтов, представляющий длинное целое число.A read-only span of bytes representing the big integer.

isUnsigned
Boolean

true, чтобы указать, что value использует неподписанную кодировку; в противном случае — false (значение по умолчанию).true to indicate value uses unsigned encoding; otherwise, false (the default value).

isBigEndian
Boolean

true, чтобы указать, что value имеет обратный порядок байтов; в противном случае — false (значение по умолчанию).true to indicate value is in big-endian byte order; otherwise, false (the default value).

Applies to