BigInteger Konstruktorer
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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
value är NaN, NegativeInfinityeller PositiveInfinity.
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
value är NaN, NegativeInfinityeller PositiveInfinity.
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).