BigInteger Konstruktorer

Definition

Initierar en ny instans av BigInteger strukturen.

Överlagringar

Name Description
BigInteger(Byte[])

Initierar en ny instans av strukturen med hjälp av BigInteger värdena i en bytematris.

BigInteger(Decimal)

Initierar en ny instans av strukturen med hjälp av BigInteger ett Decimal värde.

BigInteger(Double)

Initierar en ny instans av BigInteger strukturen med ett flyttal med dubbel precision.

BigInteger(Int32)

Initierar en ny instans av BigInteger strukturen med ett 32-bitars signerat heltalsvärde.

BigInteger(Int64)

Initierar en ny instans av BigInteger strukturen med ett 64-bitars signerat heltalsvärde.

BigInteger(Single)

Initierar en ny instans av strukturen med hjälp av BigInteger ett flyttal med enkel precision.

BigInteger(UInt32)

Initierar en ny instans av BigInteger strukturen med ett osignerat 32-bitars heltalsvärde.

BigInteger(UInt64)

Initierar en ny instans av BigInteger strukturen med ett osignerat 64-bitars heltalsvärde.

BigInteger(ReadOnlySpan<Byte>, Boolean, Boolean)

Initierar en ny instans av strukturen med hjälp av BigInteger värdena i ett skrivskyddat intervall med byte, och du kan också ange signeringskodningen och byteordningen för endianness.

BigInteger(Byte[])

Viktigt!

Detta API uppfyller inte CLS.

Initierar en ny instans av strukturen med hjälp av BigInteger värdena i en bytematris.

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())

Parametrar

value
Byte[]

En matris med bytevärden i lite endiansk ordning.

Attribut

Undantag

value är null.

Exempel

I följande exempel instansierar ett BigInteger objekt från en 5-elements bytematris vars värde är {5, 4, 3, 2, 1}. Sedan visas BigInteger värdet, som representeras som både decimal- och hexadecimala tal, i konsolen. En jämförelse av indatamatrisen med textutdata gör det tydligt varför den här överlagringen BigInteger av klasskonstruktorn skapar ett BigInteger objekt vars värde är 4328719365 (eller 0x102030405). Det första elementet i bytematrisen, vars värde är 5, definierar värdet för objektets lägsta byte BigInteger i ordningen, vilket är 0x05. Det andra elementet i bytematrisen, vars värde är 4, definierar värdet för objektets andra byte BigInteger , som är 0x04 och så vidare.

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).

I följande exempel instansierar ett positivt och ett negativt BigInteger värde, skickar dem till ToByteArray metoden och återställer sedan de ursprungliga BigInteger värdena från den resulterande bytematrisen. Observera att de två värdena representeras av identiska bytematriser. Den enda skillnaden mellan dem är i den viktigaste biten av det sista elementet i bytematrisen. Den här biten anges (värdet för bytet är 0xFF) om matrisen skapas från ett negativt BigInteger värde. Biten har inte angetts (värdet för byte är noll) om matrisen skapas från ett positivt BigInteger värde.

// 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

I följande exempel visas hur du ser till att ett positivt värde inte instansieras felaktigt som ett negativt värde genom att lägga till en byte vars värde är noll i slutet av matrisen.

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.

Kommentarer

De enskilda byteen i matrisen value bör vara i lite slutpunktsordning, från byte i lägsta ordning till byte i högsta ordning. Det numeriska värdet 1 000 000 000 000 000 representeras till exempel enligt följande tabell:

Representation Value
Hexadecimal sträng E8D4A51000
Bytematris (lägst index först) 00 10 A5 D4 E8 00

De flesta metoder som konverterar numeriska värden till bytematriser, till exempel BigInteger.ToByteArray och BitConverter.GetBytes, returnerar bytematriser i lite endiansk ordning.

Konstruktorn förväntar sig att positiva värden i bytematrisen använder sign-and-magnitude-representation och negativa värden för att använda tvås komplementrepresentation. Med andra ord är det resulterande BigInteger värdet negativt om den högsta ordningens bit av den högsta ordningens byte angesvalue. Beroende på källan för bytematrisen kan det leda till att ett positivt värde misstolkas som ett negativt värde. Bytematriser genereras vanligtvis på följande sätt:

  • Genom att anropa BigInteger.ToByteArray metoden. Eftersom den här metoden returnerar en bytematris med den högsta ordningen av den högsta byteordningen i matrisen inställd på noll för positiva värden, finns det ingen chans att ett positivt värde misstolkas som negativt. Oförändrade bytematriser som skapats av ToByteArray metoden kan alltid skickas tur och retur när de skickas till BigInteger(Byte[]) konstruktorn.

  • Genom att anropa BitConverter.GetBytes metoden och skicka den ett signerat heltal som en parameter. Eftersom signerade heltal hanterar både tecken- och storleksrepresentation och tvås komplementrepresentation finns det ingen chans att feltolka ett positivt värde som negativt.

  • Genom att anropa BitConverter.GetBytes metoden och skicka den ett osignerat heltal som en parameter. Eftersom osignerade heltal endast representeras av deras storlek kan positiva värden feltolkas som negativa värden. För att förhindra den här feltolkningen kan du lägga till ett nollbytevärde i slutet av matrisen. Exemplet i nästa avsnitt innehåller en bild.

  • Genom att skapa en bytematris antingen dynamiskt eller statiskt utan att nödvändigtvis anropa någon av de tidigare metoderna, eller genom att ändra en befintlig bytematris. Om du vill förhindra att positiva värden misstolkas som negativa värden kan du lägga till ett nollbytevärde i slutet av matrisen.

Om value är en tom Byte matris initieras det nya BigInteger objektet till värdet BigInteger.Zero. Om value är nullgenererar konstruktorn en ArgumentNullException.

Se även

Gäller för

BigInteger(Decimal)

Initierar en ny instans av strukturen med hjälp av BigInteger ett Decimal värde.

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

Parametrar

value
Decimal

Ett decimaltal.

Exempel

I följande exempel visas hur konstruktorn används BigInteger(Decimal) för att instansiera ett BigInteger objekt. Den definierar en matris med Decimal värden och skickar sedan varje värde till BigInteger(Decimal) konstruktorn. Observera att värdet Decimal trunkeras i stället för avrundas när det tilldelas till BigInteger objektet.

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.

Kommentarer

Resultatet av att anropa den här konstruktorn är identiskt med att uttryckligen tilldela ett Decimal värde till en BigInteger variabel.

Att anropa den här konstruktorn kan orsaka dataförlust. en del av value trunkeras när ett BigInteger objekt instansieras.

Gäller för

BigInteger(Double)

Initierar en ny instans av BigInteger strukturen med ett flyttal med dubbel precision.

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

Parametrar

value
Double

Ett flyttal med dubbel precision.

Undantag

Exempel

I följande exempel visas hur konstruktorn används BigInteger(Double) för att instansiera ett BigInteger objekt. Det illustrerar också den förlust av precision som kan uppstå när du använder Double datatypen. A Double tilldelas ett stort värde som sedan tilldelas till ett BigInteger objekt. Som utdata visar innebär den här tilldelningen en förlust av precision. Båda värdena ökas sedan med ett. Utdata visar att objektet BigInteger återspeglar det ändrade värdet, medan objektet Double inte gör det.

// 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

Kommentarer

En del av parametern value trunkeras när ett BigInteger objekt instansieras.

På grund av bristen på precision för Double datatypen kan anrop av den här konstruktorn orsaka dataförlust.

Värdet BigInteger som resulterar i att anropa den här konstruktorn är identiskt med det värde som resulterar i att uttryckligen tilldela ett Double värde till en BigInteger.

Gäller för

BigInteger(Int32)

Initierar en ny instans av BigInteger strukturen med ett 32-bitars signerat heltalsvärde.

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

Parametrar

value
Int32

Ett 32-bitars signerat heltal.

Exempel

I följande exempel anropas BigInteger(Int32) konstruktorn för att instansiera BigInteger värden från en matris med 32-bitars heltal. Den använder också implicit konvertering för att tilldela varje 32-bitars heltalsvärde till en BigInteger variabel. Sedan jämförs de två värdena för att fastställa att de resulterande BigInteger värdena är desamma.

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

Kommentarer

Det finns ingen precisionsförlust när du instansierar ett BigInteger objekt med hjälp av den här konstruktorn.

Värdet BigInteger som uppstår när konstruktorn anropas är identiskt med det värde som resulterar i att tilldela ett Int32 värde till en BigInteger.

Strukturen BigInteger innehåller inte konstruktorer med en parameter av typen Byte, Int16, SByteeller UInt16. Typen stöder dock Int32 implicit konvertering av 8-bitars och 16-bitars signerade och osignerade heltal till signerade 32-bitars heltal. Därför anropas den här konstruktorn om value är någon av dessa fyra integraltyper.

Gäller för

BigInteger(Int64)

Initierar en ny instans av BigInteger strukturen med ett 64-bitars signerat heltalsvärde.

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

Parametrar

value
Int64

Ett 64-bitars signerat heltal.

Exempel

I följande exempel anropas BigInteger(Int64) konstruktorn för att instansiera BigInteger värden från en matris med 64-bitars heltal. Den använder också implicit konvertering för att tilldela varje 64-bitars heltalsvärde till en BigInteger variabel. Sedan jämförs de två värdena för att fastställa att de resulterande BigInteger värdena är desamma.

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:
//       -9223372036854775808 = -9223372036854775808: True
//       -10534 = -10534: True
//       -189 = -189: True
//       0 = 0: True
//       17 = 17: True
//       113439 = 113439: True
//       9223372036854775807 = 9223372036854775807: 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:
//       -9223372036854775808 = -9223372036854775808: True
//       -10534 = -10534: True
//       -189 = -189: True
//       0 = 0: True
//       17 = 17: True
//       113439 = 113439: True
//       9223372036854775807 = 9223372036854775807: 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:
'       -9223372036854775808 = -9223372036854775808: True
'       -10534 = -10534: True
'       -189 = -189: True
'       0 = 0: True
'       17 = 17: True
'       113439 = 113439: True
'       9223372036854775807 = 9223372036854775807: True

Kommentarer

Det finns ingen precisionsförlust när du instansierar ett BigInteger objekt med hjälp av den här konstruktorn.

Värdet BigInteger som uppstår när konstruktorn anropas är identiskt med det värde som resulterar i att tilldela ett Int64 värde till en BigInteger.

Gäller för

BigInteger(Single)

Initierar en ny instans av strukturen med hjälp av BigInteger ett flyttal med enkel precision.

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

Parametrar

value
Single

Ett flyttal med enkel precision.

Undantag

Exempel

I följande exempel visas hur konstruktorn används BigInteger(Single) för att instansiera ett BigInteger objekt. Det illustrerar också den förlust av precision som kan uppstå när du använder Single datatypen. A Single tilldelas ett stort negativt värde som sedan tilldelas till ett BigInteger objekt. Som utdata visar innebär den här tilldelningen en förlust av precision. Båda värdena ökas sedan med ett. Utdata visar att objektet BigInteger återspeglar det ändrade värdet, medan objektet Single inte gör det.

// 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

Kommentarer

En del av parametern value trunkeras när ett BigInteger objekt instansieras.

På grund av bristen på precision för Single datatypen kan anrop av den här konstruktorn resultera i dataförlust.

Värdet BigInteger som resulterar i att anropa den här konstruktorn är identiskt med det värde som resulterar i att uttryckligen tilldela ett Single värde till en BigInteger.

Gäller för

BigInteger(UInt32)

Viktigt!

Detta API uppfyller inte CLS.

Alternativ som uppfyller CLS
System.Numerics.BigInteger.BigInteger(Int64)

Initierar en ny instans av BigInteger strukturen med ett osignerat 32-bitars heltalsvärde.

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)

Parametrar

value
UInt32

Ett osignerat 32-bitars heltalsvärde.

Attribut

Exempel

I följande exempel används BigInteger(UInt32) konstruktorn och en tilldelningsinstruktor för att initiera BigInteger värden från en matris med osignerade 32-bitars heltal. Sedan jämförs de två värdena för att visa att de två metoderna för att initiera ett BigInteger värde ger identiska resultat.

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.

Kommentarer

Det finns ingen förlust av precision när du instansierar en BigInteger med hjälp av den här konstruktorn.

Värdet BigInteger som är resultatet av att anropa den här konstruktorn är identiskt med det värde som resulterar i att tilldela ett UInt32 värde till en BigInteger.

Gäller för

BigInteger(UInt64)

Viktigt!

Detta API uppfyller inte CLS.

Alternativ som uppfyller CLS
System.Numerics.BigInteger.BigInteger(Double)

Initierar en ny instans av BigInteger strukturen med ett osignerat 64-bitars heltalsvärde.

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)

Parametrar

value
UInt64

Ett osignerat 64-bitars heltal.

Attribut

Exempel

I följande exempel används BigInteger(UInt64) konstruktorn för att instansiera ett BigInteger objekt vars värde är lika med 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

Kommentarer

Det finns ingen förlust av precision när du instansierar en BigInteger med hjälp av den här konstruktorn.

Värdet BigInteger som är resultatet av att anropa den här konstruktorn är identiskt med det värde som resulterar i att tilldela ett UInt64 värde till en BigInteger.

Gäller för

BigInteger(ReadOnlySpan<Byte>, Boolean, Boolean)

Initierar en ny instans av strukturen med hjälp av BigInteger värdena i ett skrivskyddat intervall med byte, och du kan också ange signeringskodningen och byteordningen för endianness.

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)

Parametrar

value
ReadOnlySpan<Byte>

Ett skrivskyddat intervall med byte som representerar det stora heltalet.

isUnsigned
Boolean

true för att ange value använder osignerad kodning, annars false (standardvärdet).

isBigEndian
Boolean

true för att indikera value är i storslutsbyteordning, annars false (standardvärdet).

Gäller för