本文為機器翻譯文章。如需檢視英文版,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文

BigInteger 結構

 

表示任意大、帶正負號的整數。

命名空間:   System.Numerics
組件:  System.Numerics (於 System.Numerics.dll)

[SerializableAttribute]
public struct BigInteger : IFormattable, IComparable, IComparable<BigInteger>, 
	IEquatable<BigInteger>

名稱描述
System_CAPS_pubmethodBigInteger(Byte[])

初始化的新執行個體 BigInteger 結構使用的位元組陣列中的值。

System_CAPS_pubmethodBigInteger(Decimal)

初始化的新執行個體 BigInteger 結構使用 Decimal 值。

System_CAPS_pubmethodBigInteger(Double)

初始化的新執行個體 BigInteger 結構使用雙精確度浮點值。

System_CAPS_pubmethodBigInteger(Int32)

初始化的新執行個體 BigInteger 結構使用 32 位元帶正負號的整數值。

System_CAPS_pubmethodBigInteger(Int64)

初始化的新執行個體 BigInteger 結構使用 64 位元帶正負號的整數值。

System_CAPS_pubmethodBigInteger(Single)

初始化的新執行個體 BigInteger 結構使用的單精確度浮點值。

System_CAPS_pubmethodBigInteger(UInt32)

初始化的新執行個體 BigInteger 結構使用 32 位元不帶正負號的整數值。

System_CAPS_pubmethodBigInteger(UInt64)

初始化的新執行個體 BigInteger 結構,含有 64 位元不帶正負號的整數值。

名稱描述
System_CAPS_pubpropertyIsEven

指出是否在目前的值 BigInteger 物件是偶數。

System_CAPS_pubpropertyIsOne

指出是否在目前的值 BigInteger 物件是 BigInteger.One

System_CAPS_pubpropertyIsPowerOfTwo

指出是否在目前的值 BigInteger 物件是二的次方。

System_CAPS_pubpropertyIsZero

指出是否在目前的值 BigInteger 物件是 BigInteger.Zero

System_CAPS_pubpropertySystem_CAPS_staticMinusOne

取得表示數字負一 (-1) 的值。

System_CAPS_pubpropertySystem_CAPS_staticOne

取得表示數字一 (1) 的值。

System_CAPS_pubpropertySign

取得表示正負號的數字 (負數、 正數或零) 的目前 BigInteger 物件。

System_CAPS_pubpropertySystem_CAPS_staticZero

取得表示數字 0 (零) 的值。

名稱描述
System_CAPS_pubmethodSystem_CAPS_staticAbs(BigInteger)

取得數值的絕對值 BigInteger 物件。

System_CAPS_pubmethodSystem_CAPS_staticAdd(BigInteger, BigInteger)

加入兩個 BigInteger 值並傳回結果。

System_CAPS_pubmethodSystem_CAPS_staticCompare(BigInteger, BigInteger)

比較兩個 BigInteger 值並傳回一個整數,表示第一個值是小於、 等於或大於第二個值。

System_CAPS_pubmethodCompareTo(BigInteger)

比較這個執行個體和第二個 BigInteger ,並傳回一個整數,表示這個執行個體的值是小於、 等於或大於指定之物件的值。

System_CAPS_pubmethodCompareTo(Int64)

比較這個執行個體與帶正負號的 64 位元整數,並且傳回整數,這個整數表示這個執行個體的值小於、等於或大於帶正負號 64 位元整數的值。

System_CAPS_pubmethodCompareTo(Object)

比較這個執行個體與特定物件,並且傳回一個整數,指出這個執行個體的值是小於、等於或大於特定物件的值。

System_CAPS_pubmethodCompareTo(UInt64)

比較這個執行個體與不帶正負號的 64 位元整數,並且傳回整數,這個整數表示這個執行個體的值小於、等於或大於不帶正負號 64 位元整數的值。

System_CAPS_pubmethodSystem_CAPS_staticDivide(BigInteger, BigInteger)

將一個 BigInteger 另一個值,並傳回結果。

System_CAPS_pubmethodSystem_CAPS_staticDivRem(BigInteger, BigInteger, BigInteger)

將一個 BigInteger 值,另一個,傳回的結果,並傳回餘數做為輸出參數。

System_CAPS_pubmethodEquals(BigInteger)

傳回值,指出是否目前執行個體和指定 BigInteger 物件具有相同的值。

System_CAPS_pubmethodEquals(Int64)

傳回值,這個值表示目前執行個體與帶正負號的 64 位元整數是否有相同的值。

System_CAPS_pubmethodEquals(Object)

傳回值,這個值表示目前執行個體與指定的物件是否有相同的值。(覆寫 ValueType.Equals(Object)。)

System_CAPS_pubmethodEquals(UInt64)

傳回值,這個值表示目前執行個體與不帶正負號的 64 位元整數是否有相同的值。

System_CAPS_pubmethodGetHashCode()

傳回目前的雜湊程式碼 BigInteger 物件。(覆寫 ValueType.GetHashCode()。)

System_CAPS_pubmethodGetType()

取得目前執行個體的 Type(繼承自 Object。)

System_CAPS_pubmethodSystem_CAPS_staticGreatestCommonDivisor(BigInteger, BigInteger)

尋找兩個最大公因數 BigInteger 值。

System_CAPS_pubmethodSystem_CAPS_staticLog(BigInteger)

傳回指定數字的自然 (底數為 e) 對數。

System_CAPS_pubmethodSystem_CAPS_staticLog(BigInteger, Double)

傳回指定底數中指定數字的對數。

System_CAPS_pubmethodSystem_CAPS_staticLog10(BigInteger)

傳回指定數字的以 10 為底數的對數。

System_CAPS_pubmethodSystem_CAPS_staticMax(BigInteger, BigInteger)

傳回較大的兩個 BigInteger 值。

System_CAPS_pubmethodSystem_CAPS_staticMin(BigInteger, BigInteger)

傳回兩個較小 BigInteger 值。

System_CAPS_pubmethodSystem_CAPS_staticModPow(BigInteger, BigInteger, BigInteger)

一個數目自乘至另一個數目的乘冪後,執行模數除法。

System_CAPS_pubmethodSystem_CAPS_staticMultiply(BigInteger, BigInteger)

傳回兩個產品 BigInteger 值。

System_CAPS_pubmethodSystem_CAPS_staticNegate(BigInteger)

否定指定 BigInteger 值。

System_CAPS_pubmethodSystem_CAPS_staticParse(String)

將數字的字串表示,轉換為其相等的 BigInteger

System_CAPS_pubmethodSystem_CAPS_staticParse(String, IFormatProvider)

將使用指定特定文化特性格式之數字的字串表示轉換為其相等的 BigInteger

System_CAPS_pubmethodSystem_CAPS_staticParse(String, NumberStyles)

將指定樣式中數字的字串表示轉換為其相等的 BigInteger

System_CAPS_pubmethodSystem_CAPS_staticParse(String, NumberStyles, IFormatProvider)

將數字的字串表示 (使用指定樣式和特定文化特性的格式) 轉換為其相等的 BigInteger

System_CAPS_pubmethodSystem_CAPS_staticPow(BigInteger, Int32)

引發 BigInteger 指定值的乘冪的值。

System_CAPS_pubmethodSystem_CAPS_staticRemainder(BigInteger, BigInteger)

執行兩個整數除法 BigInteger 值,並傳回餘數。

System_CAPS_pubmethodSystem_CAPS_staticSubtract(BigInteger, BigInteger)

減去一個 BigInteger 從另一個值,並傳回結果。

System_CAPS_pubmethodToByteArray()

將轉換 BigInteger 值的位元組陣列。

System_CAPS_pubmethodToString()

將目前 BigInteger 物件的數值,轉換為其相等的字串表示。(覆寫 ValueType.ToString()。)

System_CAPS_pubmethodToString(IFormatProvider)

使用指定的文化特性特定格式資訊,將目前 BigInteger 物件的數值轉換為其對等字串表示。

System_CAPS_pubmethodToString(String)

使用指定的格式,將目前 BigInteger 物件的值,轉換為其相等字串表示。

System_CAPS_pubmethodToString(String, IFormatProvider)

使用指定的格式和特定文化特性的格式資訊,將目前 BigInteger 物件的數值,轉換為其相等的字串表示。

System_CAPS_pubmethodSystem_CAPS_staticTryParse(String, BigInteger)

嘗試將數字的字串表示轉換成其相等的 BigInteger,並傳回一個值表示轉換是否成功。

System_CAPS_pubmethodSystem_CAPS_staticTryParse(String, NumberStyles, IFormatProvider, BigInteger)

使用指定的文化特性特定格式資訊和格式樣式,將日期和時間的指定字串表示轉換為其對等的 BigInteger,並傳回值,這個值表示轉換是否成功。

名稱描述
System_CAPS_puboperatorSystem_CAPS_staticAddition(BigInteger, BigInteger)

兩個指定的值相加 BigInteger 物件。

System_CAPS_puboperatorSystem_CAPS_staticBitwiseAnd(BigInteger, BigInteger)

執行位元 And 作業對兩個 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticBitwiseOr(BigInteger, BigInteger)

執行位元 Or 作業對兩個 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticDecrement(BigInteger)

遞減 BigInteger 1 的值。

System_CAPS_puboperatorSystem_CAPS_staticDivision(BigInteger, BigInteger)

將指定 BigInteger 由另一個指定的值 BigInteger 使用整數除法的值。

System_CAPS_puboperatorSystem_CAPS_staticEquality(BigInteger, BigInteger)

傳回值,指出是否兩個值 BigInteger 物件是否相等。

System_CAPS_puboperatorSystem_CAPS_staticEquality(BigInteger, Int64)

傳回值,指出是否 BigInteger 值與帶正負號的長整數值是否相等。

System_CAPS_puboperatorSystem_CAPS_staticEquality(BigInteger, UInt64)

傳回值,指出是否 BigInteger 值與不帶正負號的長整數值是否相等。

System_CAPS_puboperatorSystem_CAPS_staticEquality(Int64, BigInteger)

傳回值,表示帶正負號的長整數值與 BigInteger 值是否相等。

System_CAPS_puboperatorSystem_CAPS_staticEquality(UInt64, BigInteger)

傳回值,表示不帶正負號的長整數值與 BigInteger 值是否相等。

System_CAPS_puboperatorSystem_CAPS_staticExclusiveOr(BigInteger, BigInteger)

執行位元互斥 Or (XOr) 對兩個作業 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(BigInteger to Byte)

定義的明確轉換 BigInteger 物件到不帶正負號的位元組值。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(BigInteger to Decimal)

定義的明確轉換 BigInteger 物件傳遞給 Decimal 值。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(BigInteger to Double)

定義的明確轉換 BigInteger 物件傳遞給 Double 值。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(BigInteger to Int16)

定義的明確轉換 BigInteger 16 位元帶正負號的整數值的物件。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(BigInteger to Int32)

定義的明確轉換 BigInteger 物件到 32 位元帶正負號的整數值。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(BigInteger to Int64)

定義的明確轉換 BigInteger 物件到 64 位元帶正負號的整數值。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(BigInteger to SByte)

定義的明確轉換 BigInteger 物件到帶正負號的 8 位元值。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(BigInteger to Single)

定義的明確轉換 BigInteger 為單精確度浮點數值的物件。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(BigInteger to UInt16)

定義的明確轉換 BigInteger 物件到 16 位元不帶正負號的整數值。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(BigInteger to UInt32)

定義的明確轉換 BigInteger 物件到 32 位元不帶正負號的整數值。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(BigInteger to UInt64)

定義的明確轉換 BigInteger 物件到 64 位元不帶正負號的整數值。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(Decimal to BigInteger)

定義的明確轉換 Decimal 物件傳遞給 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(Double to BigInteger)

定義的明確轉換 DoubleBigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticExplicit(Single to BigInteger)

定義的明確轉換 Single 物件傳遞給 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticGreaterThan(BigInteger, BigInteger)

傳回值,指出是否 BigInteger 值是否大於另一個 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticGreaterThan(BigInteger, Int64)

傳回值,指出是否 BigInteger 大於 64 位元帶正負號的整數值。

System_CAPS_puboperatorSystem_CAPS_staticGreaterThan(BigInteger, UInt64)

傳回值,指出是否 BigInteger 值是否大於 64 位元不帶正負號的整數。

System_CAPS_puboperatorSystem_CAPS_staticGreaterThan(Int64, BigInteger)

傳回值,這個值表示 64 位元帶正負號的整數是否大於 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticGreaterThan(UInt64, BigInteger)

傳回值,指出是否 BigInteger 值是否大於 64 位元不帶正負號的整數。

System_CAPS_puboperatorSystem_CAPS_staticGreaterThanOrEqual(BigInteger, BigInteger)

傳回值,指出是否 BigInteger 值是否大於或等於另一個 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticGreaterThanOrEqual(BigInteger, Int64)

傳回值,指出是否 BigInteger 值是否大於或等於 64 位元帶正負號的整數值。

System_CAPS_puboperatorSystem_CAPS_staticGreaterThanOrEqual(BigInteger, UInt64)

傳回值,指出是否 BigInteger 值是否大於或等於 64 位元不帶正負號的整數值。

System_CAPS_puboperatorSystem_CAPS_staticGreaterThanOrEqual(Int64, BigInteger)

傳回值,這個值表示 64 位元帶正負號的整數是否大於或等於 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticGreaterThanOrEqual(UInt64, BigInteger)

傳回值,這個值表示 64 位元不帶正負號的整數是否大於或等於 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticImplicit(Byte to BigInteger)

定義要不帶正負號位元組的隱含轉換 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticImplicit(Int16 to BigInteger)

定義從帶正負號的 16 位元整數到的隱含轉換 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticImplicit(Int32 to BigInteger)

定義從帶正負號的 32 位元整數到的隱含轉換 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticImplicit(Int64 to BigInteger)

定義從帶正負號的 64 位元整數到的隱含轉換 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticImplicit(SByte to BigInteger)

定義從 8 位元帶正負號整數到的隱含轉換 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticImplicit(UInt16 to BigInteger)

定義從 16 位元不帶正負號整數到的隱含轉換 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticImplicit(UInt32 to BigInteger)

定義從 32 位元不帶正負號整數到的隱含轉換 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticImplicit(UInt64 to BigInteger)

定義從 64 位元不帶正負號整數到的隱含轉換 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticIncrement(BigInteger)

遞增 BigInteger 1 的值。

System_CAPS_puboperatorSystem_CAPS_staticInequality(BigInteger, BigInteger)

傳回值,指出兩個 BigInteger 物件是否有不同的值。

System_CAPS_puboperatorSystem_CAPS_staticInequality(BigInteger, Int64)

傳回值,指出是否 BigInteger 值與 64 位元帶正負號的整數是否不相等。

System_CAPS_puboperatorSystem_CAPS_staticInequality(BigInteger, UInt64)

傳回值,指出是否 BigInteger 值與 64 位元不帶正負號的整數是否不相等。

System_CAPS_puboperatorSystem_CAPS_staticInequality(Int64, BigInteger)

傳回值,表示 64 位元帶正負號的整數與 BigInteger 值是否不相等。

System_CAPS_puboperatorSystem_CAPS_staticInequality(UInt64, BigInteger)

傳回值,這個值表示 64 位元不帶正負號的整數和 BigInteger 值是否不相等。

System_CAPS_puboperatorSystem_CAPS_staticLeftShift(BigInteger, Int32)

移位 BigInteger 值指定左邊的位元數。

System_CAPS_puboperatorSystem_CAPS_staticLessThan(BigInteger, BigInteger)

傳回值,指出是否 BigInteger 值是否小於另一個 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticLessThan(BigInteger, Int64)

傳回值,指出是否 BigInteger 值是否小於 64 位元帶正負號的整數。

System_CAPS_puboperatorSystem_CAPS_staticLessThan(BigInteger, UInt64)

傳回值,指出是否 BigInteger 值是否小於 64 位元不帶正負號的整數。

System_CAPS_puboperatorSystem_CAPS_staticLessThan(Int64, BigInteger)

傳回值,這個值表示 64 位元帶正負號的整數是否小於 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticLessThan(UInt64, BigInteger)

傳回值,這個值表示 64 位元不帶正負號的整數是否小於 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticLessThanOrEqual(BigInteger, BigInteger)

傳回值,指出是否 BigInteger 值是否小於或等於另一個 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticLessThanOrEqual(BigInteger, Int64)

傳回值,指出是否 BigInteger 值是否小於或等於 64 位元帶正負號的整數。

System_CAPS_puboperatorSystem_CAPS_staticLessThanOrEqual(BigInteger, UInt64)

傳回值,指出是否 BigInteger 值是否小於或等於 64 位元不帶正負號的整數。

System_CAPS_puboperatorSystem_CAPS_staticLessThanOrEqual(Int64, BigInteger)

傳回值,這個值表示 64 位元帶正負號的整數是否小於或等於 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticLessThanOrEqual(UInt64, BigInteger)

傳回值,這個值表示 64 位元不帶正負號的整數是否小於或等於 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticModulus(BigInteger, BigInteger)

傳回除法的結果與兩個指定的餘數 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticMultiply(BigInteger, BigInteger)

將兩個指定的 BigInteger 值相乘。

System_CAPS_puboperatorSystem_CAPS_staticOnesComplement(BigInteger)

傳回的位元一補數 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticRightShift(BigInteger, Int32)

BigInteger 值向右移動指定的位元數。

System_CAPS_puboperatorSystem_CAPS_staticSubtraction(BigInteger, BigInteger)

減去 BigInteger 值從另一個 BigInteger 值。

System_CAPS_puboperatorSystem_CAPS_staticUnaryNegation(BigInteger)

將指定的 BigInteger 值變換正負號。

System_CAPS_puboperatorSystem_CAPS_staticUnaryPlus(BigInteger)

傳回的值 BigInteger 運算元。 (運算元的正負號不會變更)。

BigInteger 型別是不可變的類型表示任意大整數的值在理論上沒有上限或下限。 成員 BigInteger 類型極為相似的其他整數類資料類型 ( Byte, ,Int16, ,Int32, ,Int64, ,SByte, ,UInt16, ,UInt32, ,和 UInt64 類型)。 此型別不同於其他整數類資料類型中 .NET Framework, ,具有所指定範圍內其 MinValueMaxValue 屬性。

System_CAPS_note注意

因為 BigInteger 類型是不變 (請參閱 變動性和 BigInteger 結構),因為它有沒有上限或下限範圍中, OutOfMemoryException 可能會造成任何作業擲回 BigInteger 變得太大的值。

您可以具現化 BigInteger 物件數種方式︰

  • 您可以使用 new 關鍵字,並做為參數提供的任何整數或浮點值 BigInteger 建構函式。 (浮點數的值會被截斷,指派給之前 BigInteger。) 下列範例說明如何使用 new 關鍵字來具現化 BigInteger 值。

    BigInteger bigIntFromDouble = new BigInteger(179032.6541);
    Console.WriteLine(bigIntFromDouble);
    BigInteger bigIntFromInt64 = new BigInteger(934157136952);
    Console.WriteLine(bigIntFromInt64);
    // The example displays the following output:
    //   179032
    //   934157136952		
    
  • 您可以宣告 BigInteger 變數並指派值,就像您一樣任何數字類型,只要這個值是整數類型。 下列範例會使用指派建立 BigIntegerInt64

    long longValue = 6315489358112;      
    BigInteger assignedFromLong = longValue;
    Console.WriteLine(assignedFromLong);
    // The example displays the following output:
    //   6315489358112
    
  • 您可以指定十進位或浮點值 BigInteger 物件,您將值轉型或將它轉換到第一次。 下列範例明確轉換 (C# 中),或將轉換 (在 Visual Basic) DoubleDecimalBigInteger

    BigInteger assignedFromDouble = (BigInteger) 179032.6541;
    Console.WriteLine(assignedFromDouble);   
    BigInteger assignedFromDecimal = (BigInteger) 64312.65m;      
    Console.WriteLine(assignedFromDecimal);
    // The example displays the following output:
    //   179032
    //   64312      
    

這些方法可讓您具現化 BigInteger 只有其中一個現有的數字的範圍中的值為的物件類型。 您可以具現化 BigInteger 物件,其值可以超過其中一種方式中的現有數值類型的範圍︰

  • 您可以使用 new 關鍵字,並提供任何大小的位元組陣列 BigInteger.BigInteger 建構函式。 例如:

    byte[] byteArray = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
    BigInteger newBigInt = new BigInteger(byteArray);
    Console.WriteLine("The value of newBigInt is {0} (or 0x{0:x}).", newBigInt);    
    // The example displays the following output:
    //   The value of newBigInt is 4759477275222530853130 (or 0x102030405060708090a).
    
  • 您可以呼叫 ParseTryParse 方法的數字的字串表示轉換成 BigInteger 例如:

    string positiveString = "91389681247993671255432112000000";
    string negativeString = "-90315837410896312071002088037140000";
    BigInteger posBigInt = 0;
    BigInteger negBigInt = 0;
    
    try {
       posBigInt = BigInteger.Parse(positiveString);
       Console.WriteLine(posBigInt);
    }
    catch (FormatException)
    {
       Console.WriteLine("Unable to convert the string '{0}' to a BigInteger value.", 
                         positiveString);
    }
    
    if (BigInteger.TryParse(negativeString, out negBigInt))
      Console.WriteLine(negBigInt);
    else
       Console.WriteLine("Unable to convert the string '{0}' to a BigInteger value.", 
                          negativeString);
    
    // The example displays the following output:
    //   9.1389681247993671255432112E+31
    //   -9.0315837410896312071002088037E+34
    
  • 您可以呼叫 static (Shared 在 Visual Basic 中) BigInteger 方法來執行數值運算式上的某些作業並傳回導出 BigInteger 結果。 下列範例的做法是 cube UInt64.MaxValue 並指派至結果 BigInteger

    BigInteger number = BigInteger.Pow(UInt64.MaxValue, 3);
    Console.WriteLine(number);
    // The example displays the following output:
    //    6277101735386680762814942322444851025767571854389858533375
    

未初始化的值 BigIntegerZero

您可以使用 BigInteger 與使用任何其他整數類資料型別執行個體。 BigInteger 多載可讓您執行基本數學運算,例如加法、 減法、 部門、 乘法、 減法、 否定和一元負運算的標準數值運算子。 您也可以使用標準數值運算子比較兩個 BigInteger 彼此的值。 像其他整數類資料類型, BigInteger 也支援的位元 And, ,Or, ,XOr, ,shift 鍵,並向右移位運算子。 不支援自訂運算子,語言 BigInteger 結構也提供對等的方法,用於執行數學運算。 這些包括 Add, ,Divide, ,Multiply, ,Negate, ,Subtract, ,以及其他許多選項。

許多成員 BigInteger 結構直接對應到其他整數類資料類型的成員。 此外, BigInteger 加入成員,如下所示︰

  • Sign, 它會傳回值,指出正負號的 BigInteger 值。

  • Abs, 它會傳回數值的絕對值 BigInteger 值。

  • DivRem, 它會傳回商數及除法運算的餘數。

  • GreatestCommonDivisor, 它會傳回兩個最大公因數 BigInteger 值。

許多這些其他成員的成員對應 Math 類別,可提供的功能,才能使用基本數字型別。

下列範例會具現化 BigInteger 物件,然後將其值會加一。

BigInteger number = BigInteger.Multiply(Int64.MaxValue, 3);
number++;
Console.WriteLine(number);

雖然此範例來修改現有值,但這不是物件的如此。 BigInteger 物件是固定不變,這表示在內部,common language runtime 實際上會建立新 BigInteger 物件,並指派其值大於先前的值。 然後會將這個新物件傳回給呼叫者。

System_CAPS_note注意

.NET Framework 中的其他數值類型也是固定不變。 不過,因為 BigInteger 類型都沒有上限或下限範圍,其值可以變得非常大,並對效能有明顯的影響。

雖然此程序是透明的呼叫端時,它會產生對效能產生負面影響。 在某些情況下,特別是當重複作業在迴圈中非常大 BigInteger 值,該效能產生負面影響可能很久。 例如,在下列範例中,執行作業重複最多萬次,而 BigInteger 每次作業成功,值會遞增一。

BigInteger number = Int64.MaxValue ^ 5;
int repetitions = 1000000;
// Perform some repetitive operation 1 million times.
for (int ctr = 0; ctr <= repetitions; ctr++)
{
   // Perform some operation. If it fails, exit the loop.
   if (! SomeOperationSucceeds()) break;
   // The following code executes if the operation succeeds.
   number++;
}

在這種情況下,您可以藉由執行所有的中繼指派,以改善效能 Int32 變數。 最後一個變數的值再指派給 BigInteger 迴圈結束時的物件。 下列範例提供一個實例。

BigInteger number = Int64.MaxValue ^ 5;
int repetitions = 1000000;
int actualRepetitions = 0;
// Perform some repetitive operation 1 million times.
for (int ctr = 0; ctr <= repetitions; ctr++)
{
   // Perform some operation. If it fails, exit the loop.
   if (! SomeOperationSucceeds()) break;
   // The following code executes if the operation succeeds.
   actualRepetitions++;
}
number += actualRepetitions;

如果您要轉換 BigInteger 值的位元組陣列,或如果您要轉換的位元組陣列到 BigInteger 值,您必須考慮的位元組順序。 BigInteger 結構需要個別的位元組由小到大的順序出現位元組陣列中 (也就是值的低序位位元組之前的高序位位元組)。 您可以來回 BigInteger 值呼叫 ToByteArray 方法,然後將 [產生的位元組陣列 BigInteger(Byte[]) 建構函式,如下列範例所示。

BigInteger number = BigInteger.Pow(Int64.MaxValue, 2);     
Console.WriteLine(number);

// Write the BigInteger value to a byte array.
byte[] bytes = number.ToByteArray();

// Display the byte array.
foreach (byte byteValue in bytes)
   Console.Write("0x{0:X2} ", byteValue);
Console.WriteLine();

// Restore the BigInteger value from a Byte array.
BigInteger newNumber = new BigInteger(bytes);
Console.WriteLine(newNumber);
// The example displays the following output:
//    8.5070591730234615847396907784E+37
//    0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x3F
//    
//    8.5070591730234615847396907784E+37

若要具現化 BigInteger 值從位元組陣列,代表其他整數類資料型別的值,您可以將整數值傳遞 BitConverter.GetBytes 方法,然後再傳遞產生的位元組陣列 BigInteger(Byte[]) 建構函式。 下列範例會具現化 BigInteger 值從位元組陣列,代表 Int16 值。

short originalValue = 30000;
Console.WriteLine(originalValue);

// Convert the Int16 value to a byte array.
byte[] bytes = BitConverter.GetBytes(originalValue);

// Display the byte array.
foreach (byte byteValue in bytes)
   Console.Write("0x{0} ", byteValue.ToString("X2"));
Console.WriteLine();

// Pass byte array to the BigInteger constructor.
BigInteger number = new BigInteger(bytes);
Console.WriteLine(number);
// The example displays the following output:
//       30000
//       0x30 0x75
//       30000

BigInteger 結構假設負數的值會儲存使用二的補數表示。 因為 BigInteger 結構代表數值,但是沒有固定的長度, BigInteger(Byte[]) 建構函式一律會解譯為正負號位元陣列中的最後一個位元組的最大顯著性位元。 若要避免 BigInteger(Byte[]) 建構函式從混淆二的補數表示負數值的正數值,正以位元組陣列中的最後一個位元組的最大顯著性位元會通常設定的值應該包含額外的位元組值為 0 的符號與量值表示法。 例如,0xC0 0xBD 0xF0 0xFF 是-1,000,000 或 4,293,967,296 由小到大十六進位表示法。 由於此陣列中的最後一個位元組的最大顯著性位元為開啟,位元組陣列的值會被解譯由 BigInteger(Byte[]) -1,000,000 建構函式。 若要具現化 BigInteger 其值為正數,位元組陣列,其元素為 0xC0 0xBD 0xF0 0xFF 0x00 必須傳遞給建構函式。 下列範例將說明這點。

int negativeNumber = -1000000;
uint positiveNumber = 4293967296;

byte[] negativeBytes = BitConverter.GetBytes(negativeNumber); 
BigInteger negativeBigInt = new BigInteger(negativeBytes);
Console.WriteLine(negativeBigInt.ToString("N0"));

byte[] tempPosBytes = BitConverter.GetBytes(positiveNumber);
byte[] positiveBytes = new byte[tempPosBytes.Length + 1];
Array.Copy(tempPosBytes, positiveBytes, tempPosBytes.Length);
BigInteger positiveBigInt = new BigInteger(positiveBytes);
Console.WriteLine(positiveBigInt.ToString("N0")); 
// The example displays the following output:
//    -1,000,000
//    4,293,967,296      

位元組陣列建立 ToByteArray 正值的方法包含此額外的零值的位元組。 因此, BigInteger 結構,就能成功地反覆存取值的指派,,然後將它們還原從位元組陣列,如下列範例所示。

BigInteger positiveValue = 15777216;
BigInteger negativeValue  = -1000000;

Console.WriteLine("Positive value: " + positiveValue.ToString("N0"));
byte[] bytes = positiveValue.ToByteArray();

foreach (byte byteValue in bytes)
   Console.Write("{0:X2} ", byteValue);
Console.WriteLine();
positiveValue = new BigInteger(bytes);
Console.WriteLine("Restored positive value: " + positiveValue.ToString("N0"));

Console.WriteLine();

Console.WriteLine("Negative value: " + negativeValue.ToString("N0"));
bytes = negativeValue.ToByteArray();
foreach (byte byteValue in bytes)
   Console.Write("{0:X2} ", byteValue);
Console.WriteLine();
negativeValue = new BigInteger(bytes);
Console.WriteLine("Restored negative value: " + negativeValue.ToString("N0"));
// The example displays the following output:
//       Positive value: 15,777,216
//       C0 BD F0 00
//       Restored positive value: 15,777,216
//       
//       Negative value: -1,000,000
//       C0 BD F0
//       Restored negative value: -1,000,000

不過,您可能需要開發人員會以動態方式建立,或不帶正負號的整數轉換成位元組陣列的方法所傳回的位元組陣列中加入此額外零值的位元組 (例如 BitConverter.GetBytes(UInt16), ,BitConverter.GetBytes(UInt32), ,和 BitConverter.GetBytes(UInt64))。

當剖析十六進位的字串, BigInteger.Parse(String, NumberStyles)BigInteger.Parse(String, NumberStyles, IFormatProvider) 方法假設在字串中的第一個位元組的最大顯著性位元設定時,是否使用二的補數表示字串的第一個十六進位數字表示較低的四個位元的位元組值,如果代表的值。 例如,「 FF01 」 和 「 F01 」 代表-255 的十進位值。 若要區分正從負數值,正值應該包含前置零。 相關的多載 ToString 方法,傳遞"X"格式字串時加入前置零的正數值傳回十六進位字串。 這可讓來回 BigInteger 藉由使用 ToStringParse 方法,如下列範例所示。

BigInteger negativeNumber = -1000000;
BigInteger positiveNumber  = 15777216;

string negativeHex = negativeNumber.ToString("X");
string positiveHex = positiveNumber.ToString("X");

BigInteger negativeNumber2, positiveNumber2;  
negativeNumber2 = BigInteger.Parse(negativeHex, 
                                   NumberStyles.HexNumber);
positiveNumber2 = BigInteger.Parse(positiveHex,
                                   NumberStyles.HexNumber);

Console.WriteLine("Converted {0:N0} to {1} back to {2:N0}.", 
                   negativeNumber, negativeHex, negativeNumber2);                                         
Console.WriteLine("Converted {0:N0} to {1} back to {2:N0}.", 
                   positiveNumber, positiveHex, positiveNumber2);                                         
// The example displays the following output:
//       Converted -1,000,000 to F0BDC0 back to -1,000,000.
//       Converted 15,777,216 to 0F0BDC0 back to 15,777,216.

不過,十六進位字串建立藉由呼叫 ToString 其他整數類資料類型或的多載的方法 ToString 方法,包括 toBase 參數並不表示正負號的值或從中衍生的十六進位字串的來源資料類型。 成功地具現化 BigInteger 這樣的字串值需要增添一些邏輯。 下列範例提供一個可能的實作。

using System;
using System.Globalization;
using System.Numerics;

public struct HexValue
{
   public int Sign;
   public string Value;
}

public class Example
{
   public static void Main()
   {
      uint positiveNumber = 4039543321;
      int negativeNumber = -255423975;

      // Convert the numbers to hex strings.
      HexValue hexValue1, hexValue2;
      hexValue1.Value = positiveNumber.ToString("X");
      hexValue1.Sign = Math.Sign(positiveNumber);

      hexValue2.Value = Convert.ToString(negativeNumber, 16);
      hexValue2.Sign = Math.Sign(negativeNumber);

      // Round-trip the hexadecimal values to BigInteger values.
      string hexString;
      BigInteger positiveBigInt, negativeBigInt;

      hexString = (hexValue1.Sign == 1 ? "0" : "") + hexValue1.Value;
      positiveBigInt = BigInteger.Parse(hexString, NumberStyles.HexNumber);      
      Console.WriteLine("Converted {0} to {1} and back to {2}.", 
                        positiveNumber, hexValue1.Value, positiveBigInt);

      hexString = (hexValue2.Sign == 1 ? "0" : "") + hexValue2.Value;
      negativeBigInt = BigInteger.Parse(hexString, NumberStyles.HexNumber);      
      Console.WriteLine("Converted {0} to {1} and back to {2}.", 
                        negativeNumber, hexValue2.Value, negativeBigInt);
   }
}
// The example displays the following output:
//       Converted 4039543321 to F0C68A19 and back to 4039543321.
//       Converted -255423975 to f0c68a19 and back to -255423975.

通用 Windows 平台
自 8 起供應
.NET Framework
自 4.0 起供應
可攜式類別庫
提供支援︰ 可攜式 .NET 平台
Silverlight
自 4.0 起供應
Windows Phone
自 8.1 起供應

此類型的任何 public static (在 Visual Basic 中 共用 在 Visual Basic 中) 成員皆為安全執行緒。不保證任何執行個體成員為安全執行緒。

回到頁首
顯示: