BigInteger Конструкторы
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Инициализирует новый экземпляр структуры BigInteger.
Перегрузки
BigInteger(Byte[]) |
Инициализирует новый экземпляр структуры BigInteger, используя значения в массиве типа byte. |
BigInteger(Decimal) |
Инициализирует новый экземпляр структуры BigInteger, используя значение Decimal. |
BigInteger(Double) |
Инициализирует новый экземпляр структуры BigInteger, используя значение с плавающей запятой двойной точности. |
BigInteger(Int32) |
Инициализирует новый экземпляр структуры BigInteger, используя 32-разрядное знаковое целое число. |
BigInteger(Int64) |
Инициализирует новый экземпляр структуры BigInteger, используя 64-разрядное целое число со знаком. |
BigInteger(Single) |
Инициализирует новый экземпляр структуры BigInteger, используя значение с плавающей запятой одиночной точности. |
BigInteger(UInt32) |
Инициализирует новый экземпляр структуры BigInteger, используя 32-разрядное целое число без знака. |
BigInteger(UInt64) |
Инициализирует новый экземпляр структуры BigInteger, используя 64-разрядное целое число без знака. |
BigInteger(ReadOnlySpan<Byte>, Boolean, Boolean) |
Инициализирует новый экземпляр структуры BigInteger, используя значения в диапазоне байтов, доступном только для чтения, и при необходимости указывая кодировку подписи и порядок следования байтов. |
BigInteger(Byte[])
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
Важно!
Этот API несовместим с CLS.
Инициализирует новый экземпляр структуры BigInteger, используя значения в массиве типа byte.
public:
BigInteger(cli::array <System::Byte> ^ value);
[System.CLSCompliant(false)]
public BigInteger (byte[] value);
[<System.CLSCompliant(false)>]
new System.Numerics.BigInteger : byte[] -> System.Numerics.BigInteger
Public Sub New (value As Byte())
Параметры
- value
- Byte[]
Массив значений типа byte в прямом порядке байтов.
- Атрибуты
Исключения
value
имеет значение null
.
Примеры
В следующем примере создается BigInteger экземпляр объекта из 5-элементного байтового массива со значением {5, 4, 3, 2, 1}. Затем в консоли отображается BigInteger значение, представленное как десятичными, так и шестнадцатеричными числами. Сравнение входного массива с текстовыми выходными данными позволяет понять, почему перегрузка конструктора BigInteger класса создает BigInteger объект, значение которого 4328719365 (или 0x102030405). Первый элемент массива байтов, значение которого равно 5, определяет значение байта BigInteger объекта с наименьшим порядком, который является 0x05. Второй элемент массива байтов, значение которого равно 4, определяет значение второго байта BigInteger объекта , который является 0x04 и т. д.
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).
let bytes = [| 5uy; 4uy; 3uy; 2uy; 1uy |]
let number = new BigInteger(bytes)
printfn $"The value of number is {number} (or 0x{number:x})."
// 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 значения из результирующего массива байтов. Обратите внимание, что эти два значения представлены идентичными массивами байтов. Единственное различие между ними заключается в наиболее значительном бите последнего элемента в массиве байтов. Этот бит устанавливается (значение байта 0xFF), если массив создается из отрицательного BigInteger значения. Бит не задан (значение байта равно нулю), если массив создается из положительного BigInteger значения.
// 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.
let positiveValue = BigInteger.Parse "4713143110832790377889"
let negativeValue = BigInteger.Add(-Int64.MaxValue, -60000)
// Create two byte arrays.
let positiveBytes = positiveValue.ToByteArray()
let negativeBytes = negativeValue.ToByteArray()
// Instantiate new BigInteger from negativeBytes array.
printf $"Converted {negativeValue:N0} to the byte array "
for byteValue in negativeBytes do
printf $"0x{byteValue:x2} "
printfn ""
let negativeValue2 = bigint negativeBytes
printfn $"Converted the byte array to {negativeValue2:N0}"
printfn ""
// Instantiate new BigInteger from positiveBytes array.
printf $"Converted {positiveValue:N0} to the byte array "
for byteValue in positiveBytes do
printf $"0x{byteValue:x2} "
printfn ""
let positiveValue2 = new BigInteger(positiveBytes)
printfn $"Converted the byte array to {positiveValue2:N0}"
printfn ""
// 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
В следующем примере показано, как убедиться, что положительное значение не было неправильно создано как отрицательное значение путем добавления байта, значение которого равно нулю, в конец массива.
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.
let originalNumber = UInt64.MaxValue
let mutable bytes = BitConverter.GetBytes originalNumber
if originalNumber > 0uL && (bytes[bytes.Length - 1] &&& 0x80uy) > 0uy then
let temp = Array.zeroCreate bytes.Length
Array.Copy(bytes, temp, bytes.Length)
bytes <- Array.zeroCreate (temp.Length + 1)
Array.Copy(temp, bytes, temp.Length)
let newNumber = bigint bytes
printfn $"Converted the UInt64 value {originalNumber:N0} to {newNumber:N0}."
// 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.
Комментарии
Отдельные байты в массиве value
должны быть в байтовом порядке с наименьшим порядком до байтов самого высокого порядка. Например, числовое значение 1,000,000,000,000 представляется, как показано в следующей таблице:
Шестнадцатеричная строка | E8D4A51000 |
Массив байтов (сначала самый низкий индекс) | 00 10 A5 D4 E8 00 |
Большинство методов, преобразующих числовые значения в массивы байтов, таких как BigInteger.ToByteArray и BitConverter.GetBytes, возвращают массивы байтов в порядке байтов.
Конструктор ожидает, что положительные значения в массиве байтов будут использовать представление знака и величины, а отрицательные значения — представление двух дополнений. Иными словами, если задан бит самого высокого порядка байта в value
, результирующее BigInteger значение будет отрицательным. В зависимости от источника массива байтов это может привести к неправильному толкованию положительного значения как отрицательного. Массивы байтов обычно создаются следующими способами:
Путем BigInteger.ToByteArray вызова метода . Так как этот метод возвращает массив байтов с битом самого высокого порядка байта в массиве, равным нулю для положительных значений, вероятность неправильного толкования положительного значения как отрицательного отсутствует. Неизмененные массивы байтов, созданные методом ToByteArray , всегда успешно выполняются при передаче в BigInteger(Byte[]) конструктор.
Путем вызова метода и передачи BitConverter.GetBytes ему целого числа со знаком в качестве параметра. Так как целые числа со знаком обрабатывают как представление знака и величины, так и представление дополнения двух, вероятность неправильного толкования положительного значения как отрицательного отсутствует.
Путем вызова BitConverter.GetBytes метода и передачи ему целого числа без знака в качестве параметра. Поскольку целые числа без знака представлены только их величиной, положительные значения могут быть неправильно интерпретированы как отрицательные значения. Чтобы избежать такого неправильного толкования, можно добавить нулевое значение в конец массива. Пример в следующем разделе содержит иллюстрацию.
Путем динамического или статического создания массива байтов без обязательного вызова любого из предыдущих методов или путем изменения существующего массива байтов. Чтобы избежать неправильного толкования положительных значений как отрицательных, можно добавить нулевое байтовое значение в конец массива.
Если value
является пустым Byte массивом, новый BigInteger объект инициализируется значением BigInteger.Zero. Если value
имеет значение null
, конструктор создает исключение ArgumentNullException.
См. также раздел
Применяется к
BigInteger(Decimal)
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
Инициализирует новый экземпляр структуры BigInteger, используя значение Decimal.
public:
BigInteger(System::Decimal value);
public BigInteger (decimal value);
new System.Numerics.BigInteger : decimal -> System.Numerics.BigInteger
Public Sub New (value As Decimal)
Параметры
- value
- Decimal
Десятичное число.
Примеры
В следующем примере показано использование конструктора BigInteger(Decimal) для создания экземпляра BigInteger объекта . Он определяет массив значений Decimal , а затем передает каждое значение конструктору BigInteger(Decimal) . Обратите внимание, что при назначении объекту Decimal значение усекается, а не округляется BigInteger .
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.
let decimalValues = [ -1790.533m; -15.1514m; 18903.79m; 9180098.003m ]
for decimalValue in decimalValues do
let number = bigint decimalValue
printfn $"Instantiated BigInteger value {number} from the Decimal value {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.
Комментарии
Результат вызова этого конструктора идентичен явному присвоению Decimal значения переменной BigInteger .
Вызов этого конструктора может привести к потере данных; любая дробная часть value
усекается при создании экземпляра BigInteger объекта .
Применяется к
BigInteger(Double)
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
Инициализирует новый экземпляр структуры BigInteger, используя значение с плавающей запятой двойной точности.
public:
BigInteger(double value);
public BigInteger (double value);
new System.Numerics.BigInteger : double -> System.Numerics.BigInteger
Public Sub New (value As Double)
Параметры
- value
- Double
Значение с плавающей точкой двойной точности.
Исключения
value
имеет значение NaN, NegativeInfinity или PositiveInfinity.
Примеры
В следующем примере показано использование конструктора BigInteger(Double) для создания экземпляра BigInteger объекта . В нем также показана потеря точности, которая может произойти при использовании Double типа данных. Объекту Double присваивается большое значение, которое затем присваивается объекту BigInteger . Как видно из выходных данных, это назначение связано с потерей точности. Затем оба значения увеличиваются на единицу. В выходных BigInteger данных показано, что объект отражает измененное значение, а Double объект — нет.
// 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.
let doubleValue = -6e20
let bigIntValue = bigint doubleValue
printfn $"Original Double value: {doubleValue:N0}"
printfn $"Original BigInteger value: {bigIntValue:N0}"
// Increment and then display both values.
let doubleValue = doubleValue + 1.
let bigIntValue = bigIntValue + BigInteger.One
printfn $"Incremented Double value: {doubleValue:N0}"
printfn $"Incremented BigInteger value: {bigIntValue:N0}"
// 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
Комментарии
Любая дробная часть value
параметра усекается при создании экземпляра BigInteger объекта .
Из-за отсутствия точности Double типа данных вызов этого конструктора может привести к потере данных.
Значение, полученное BigInteger в результате вызова этого конструктора, идентично значению, полученному в результате явного Double присвоения значения BigInteger.
Применяется к
BigInteger(Int32)
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
Инициализирует новый экземпляр структуры BigInteger, используя 32-разрядное знаковое целое число.
public:
BigInteger(int value);
public BigInteger (int value);
new System.Numerics.BigInteger : int -> System.Numerics.BigInteger
Public Sub New (value As Integer)
Параметры
- value
- Int32
32-разрядное знаковое целое число.
Примеры
В следующем примере вызывается BigInteger(Int32) конструктор для создания BigInteger экземпляров значений из массива 32-разрядных целых чисел. Он также использует неявное преобразование для присвоения каждому 32-разрядному целочисленного значения переменной BigInteger . Затем он сравнивает два значения, чтобы установить, что результирующее BigInteger значение совпадает.
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
let integers = [ Int32.MinValue; -10534; -189; 0; 17; 113439; Int32.MaxValue ]
for number in integers do
let constructed = bigint number
let assigned = number
printfn $"{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
Комментарии
Точность при создании экземпляра BigInteger объекта с помощью этого конструктора не теряется.
Значение, полученное BigInteger в результате вызова этого конструктора, идентично значению, полученному Int32 в результате присвоения значения BigInteger.
Структура BigInteger не включает конструкторы с параметром типа Byte, Int16, SByteили UInt16. Однако Int32 тип поддерживает неявное преобразование 8- и 16-разрядных целых чисел со знаком и без знака в 32-разрядные целые числа со знаком. В результате этот конструктор вызывается, если value
является одним из этих четырех целочисленных типов.
Применяется к
BigInteger(Int64)
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
Инициализирует новый экземпляр структуры BigInteger, используя 64-разрядное целое число со знаком.
public:
BigInteger(long value);
public BigInteger (long value);
new System.Numerics.BigInteger : int64 -> System.Numerics.BigInteger
Public Sub New (value As Long)
Параметры
- value
- Int64
64-разрядное целое число со знаком.
Примеры
В следующем примере вызывается BigInteger(Int64) конструктор для создания BigInteger экземпляров значений из массива 64-разрядных целых чисел. Он также использует неявное преобразование для присвоения каждому 64-разрядному целочисленного значения переменной BigInteger . Затем он сравнивает два значения, чтобы установить, что результирующее BigInteger значение совпадает.
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
let longs = [ Int64.MinValue; -10534; -189; 0; 17; 113439; Int64.MaxValue ]
for number in longs do
let constructed = bigint number
let assigned = number
printfn $"{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
Комментарии
Точность при создании экземпляра BigInteger объекта с помощью этого конструктора не теряется.
Значение, полученное BigInteger в результате вызова этого конструктора, идентично значению, полученному Int64 в результате присвоения значения BigInteger.
Применяется к
BigInteger(Single)
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
Инициализирует новый экземпляр структуры BigInteger, используя значение с плавающей запятой одиночной точности.
public:
BigInteger(float value);
public BigInteger (float value);
new System.Numerics.BigInteger : single -> System.Numerics.BigInteger
Public Sub New (value As Single)
Параметры
- value
- Single
Значение с плавающей точкой одинарной точности.
Исключения
value
имеет значение NaN, NegativeInfinity или PositiveInfinity.
Примеры
В следующем примере показано использование конструктора BigInteger(Single) для создания экземпляра BigInteger объекта . В нем также показана потеря точности, которая может произойти при использовании Single типа данных. Объекту Single присваивается большое отрицательное значение, которое затем присваивается объекту BigInteger . Как видно из выходных данных, это назначение связано с потерей точности. Затем оба значения увеличиваются на единицу. Выходные данные показывают, что BigInteger объект отражает измененное значение, а Single объект — нет.
// 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
let negativeSingle = Single.MinValue
let negativeNumber = bigint negativeSingle
printfn $"""{negativeSingle.ToString "N0"}"""
printfn $"""{negativeNumber.ToString "N0"}"""
let negativeSingle = negativeSingle + 1f
let negativeNumber = negativeNumber + 1I
printfn $"""{negativeSingle.ToString "N0"}"""
printfn $"""{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
Комментарии
Любая дробная часть value
параметра усекается при создании экземпляра BigInteger объекта.
Из-за отсутствия точности Single типа данных вызов этого конструктора может привести к потере данных.
Значение, полученное BigInteger при вызове этого конструктора, идентично значению, которое является результатом явного Single присвоения значения BigInteger.
Применяется к
BigInteger(UInt32)
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
Важно!
Этот API несовместим с CLS.
- Альтернативный вариант, совместимый с CLS
- System.Numerics.BigInteger.BigInteger(Int64)
Инициализирует новый экземпляр структуры BigInteger, используя 32-разрядное целое число без знака.
public:
BigInteger(System::UInt32 value);
[System.CLSCompliant(false)]
public BigInteger (uint value);
[<System.CLSCompliant(false)>]
new System.Numerics.BigInteger : uint32 -> System.Numerics.BigInteger
Public Sub New (value As UInteger)
Параметры
- value
- UInt32
32-разрядное целое значение без знака.
- Атрибуты
Примеры
В следующем примере используются BigInteger(UInt32) конструктор и инструкция присваивания для инициализации BigInteger значений из массива 32-разрядных целых чисел без знака. Затем сравнивается два значения, чтобы продемонстрировать, что два метода инициализации значения дают одинаковые BigInteger результаты.
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.
let unsignedValues = [ 0u; 16704u; 199365u; UInt32.MaxValue ]
for unsignedValue in unsignedValues do
let constructedNumber = bigint unsignedValue
let assignedNumber = unsignedValue
if constructedNumber.Equals assignedNumber then
printfn $"Both methods create a BigInteger whose value is {constructedNumber:N0}."
else
printfn $"{constructedNumber:N0} ≠ {assignedNumber:N0}"
// 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.
Комментарии
При создании BigInteger экземпляра с помощью этого конструктора точность не теряется.
Значение, полученное BigInteger при вызове этого конструктора, идентично значению, которое является результатом UInt32 присвоения значения BigInteger.
Применяется к
BigInteger(UInt64)
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
Важно!
Этот API несовместим с CLS.
- Альтернативный вариант, совместимый с CLS
- System.Numerics.BigInteger.BigInteger(Double)
Инициализирует новый экземпляр структуры BigInteger, используя 64-разрядное целое число без знака.
public:
BigInteger(System::UInt64 value);
[System.CLSCompliant(false)]
public BigInteger (ulong value);
[<System.CLSCompliant(false)>]
new System.Numerics.BigInteger : uint64 -> System.Numerics.BigInteger
Public Sub New (value As ULong)
Параметры
- value
- UInt64
64-разрядное целое число без знака.
- Атрибуты
Примеры
В следующем примере конструктор используется BigInteger(UInt64) для создания экземпляра BigInteger объекта, значение которого равно 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
let unsignedValue = UInt64.MaxValue
let number = bigint unsignedValue
printfn $"{number: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
Комментарии
При создании BigInteger экземпляра с помощью этого конструктора точность не теряется.
Значение, полученное BigInteger при вызове этого конструктора, идентично значению, которое является результатом UInt64 присвоения значения BigInteger.
Применяется к
BigInteger(ReadOnlySpan<Byte>, Boolean, Boolean)
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
- Исходный код:
- BigInteger.cs
Инициализирует новый экземпляр структуры BigInteger, используя значения в диапазоне байтов, доступном только для чтения, и при необходимости указывая кодировку подписи и порядок следования байтов.
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)
Параметры
- value
- ReadOnlySpan<Byte>
Доступный только для чтения диапазон байтов, представляющий длинное целое число.
- isUnsigned
- Boolean
true
, чтобы указать, что value
использует неподписанную кодировку; в противном случае — false
(значение по умолчанию).
- isBigEndian
- Boolean
true
Значение , указывающее value
, что имеет большой порядок байтов; в противном случае false
— значение по умолчанию.