大数运算(一)

- 中国WEB开发者网络 (http://www.webasp.net)
-- 技术教程 (http://www.webasp.net/article/)
--- 大数运算(一) (http://www.webasp.net/article/28/27947.htm)
-- 作者:未知
-- 发布日期: 2006-11-10

大数运算,值的存储和分割

 Author:水如烟 

一时兴起做做看看,发现真的不简单,花时间,头大。不过体会也相应深些。

运算单元改了又改。在基本运算单元中,变量能简则简,条件检测尽可能的放在外围。

下面的代码是关于大数值的存储和分割。其中把握好地址是关键。因为数值是分块运算的,如果地址转换不正确,最后合并结果时肯定也不正确的了。这个稍经修改,可以用来写文件切合器。区别是,处理对象不同,一是字符,一是字节。

整体的我还没做好。也是一个单元一个单元的做。如往后需要修改补充,以最后供下载的代码为准。

 

Friend Class Information
    
Private Sub New()
    
End Sub

    
Private Shared gUnitMaxSize As Integer
    
Private Shared gUnitDataType As TypeCode

    
''' <summary>
    ''' 运算单元最大位数
    ''' </summary>
    Public Shared ReadOnly Property UnitMaxSize() As Integer
        
Get
            
Return 1 '测试,不用太大。gUnitMaxSize 
        End Get
    
End Property

    
''' <summary>
    ''' 运算单元数据类型
    ''' </summary>
    ''' <value></value>
    Public Shared ReadOnly Property UnitDataType() As TypeCode
        
Get
            
Return gUnitDataType
        
End Get
    
End Property

    
''' <summary>
    ''' 转换为运算单元数据类型
    ''' </summary>
    ''' <param name="Value">值</param>
    Public Shared Function ConverToUnitDataType(ByVal Value As ObjectAs Object
        
Return System.Convert.ChangeType(Value, UnitDataType)
    
End Function

    
Public Shared Function ConverToUnitDataTypeFullString(ByVal Value As ObjectAs String
        
Return Value.ToString.PadLeft(UnitMaxSize, "0"c)
    
End Function

    
Public Shared Function ConverToUnitDataTypeFullString(ByVal Value As ObjectByVal unitNum As IntegerAs String
        
Return Value.ToString.PadLeft(CInt(UnitMaxSize * Math.Pow(2, unitNum)), "0"c)
    
End Function

    
Public Shared Function SplitValueToArray(ByVal Value As StringAs String()
        
Return SplitValueToArray(Value, 0)
    
End Function

    
Public Shared Function SplitValueToArray(ByVal Value As StringByVal unitNum As IntegerAs String()
        
Return CommonFunction.SplitStringToArray(Value, CInt(UnitMaxSize * Math.Pow(2, unitNum)))
    
End Function


    
Public Shared Function AddressConvertFromAToB(ByVal aAddress As IntegerByVal aUnitNum As IntegerByVal bUnitNum As IntegerAs Integer
        
If (aAddress * Math.Pow(2, aUnitNum)) Mod Math.Pow(2, bUnitNum) > 0 Then Throw New Exception("转换无效")
        
Return CInt(aAddress * Math.Pow(2, aUnitNum) / (Math.Pow(2, bUnitNum)))
    
End Function

    
Public Shared Function IsZero(ByVal value As StringAs Boolean
        
Return System.Text.RegularExpressions.Regex.IsMatch(value, "^[0]+$")
    
End Function

    
Public Shared Function GetStringValue(ByVal Value As StringAs String
        
Dim mResult As String = System.Text.RegularExpressions.Regex.Match(Value, "^[0]{0,}(?<Value>[1-9].*)$").Groups("Value").Value
        
If String.IsNullOrEmpty(mResult) Then mResult = "0"
        
Return mResult
    
End Function

    
Public Shared Function GetStringsValue(ByVal valueCollection As Collections.ObjectModel.Collection(Of String), ByVal unitNum As IntegerAs String
        
Return GetStringsValue(valueCollection, 0, unitNum)
    
End Function

    
Public Shared Function GetStringsValue(ByVal valueCollection As Collections.ObjectModel.Collection(Of String), ByVal appendEmptyValueCount As IntegerByVal unitNum As IntegerAs String
        
Return GetStringsValue(valueCollection, 0, valueCollection.Count - 1, appendEmptyValueCount, unitNum)
    
End Function

    
Public Shared Function GetStringsValue(ByVal valueCollection As Collections.ObjectModel.Collection(Of String), ByVal firstIndex As IntegerByVal lastIndex As IntegerByVal unitNum As IntegerAs String
        
Return GetStringsValue(valueCollection, firstIndex, lastIndex, 0, unitNum)
    
End Function

    
Public Shared Function GetStringsValue(ByVal valueCollection As Collections.ObjectModel.Collection(Of String), ByVal firstIndex As IntegerByVal lastIndex As IntegerByVal appendEmptyValueCount As IntegerByVal unitNum As IntegerAs String
        
Dim b As New System.Text.StringBuilder
        
Dim tmp As String

        
For i As Integer = firstIndex To lastIndex

            
If i = firstIndex Then
                tmp 
= valueCollection(i)
            
Else
                tmp 
= Information.ConverToUnitDataTypeFullString(valueCollection(i), unitNum)
            
End If

            b.Append(tmp)
        
Next

        
For i As Integer = 0 To appendEmptyValueCount - 1
            tmp 
= Information.ConverToUnitDataTypeFullString("0", unitNum)
            b.Append(tmp)
        
Next

        
Return b.ToString
    
End Function

    
Shared Sub New()

        
'寻找可表示为整数的且表示范围最大的数据类型
        Dim mTypeName As String
        
Dim mType As Type
        
Dim mFieldInfo As Reflection.FieldInfo


        
Dim mMaxValue As String = "0"
        
Dim mDataTypeCode As TypeCode

        
Dim mCurrentTypeMaxValue As String = "0"
        
For Each c As TypeCode In [Enum].GetValues(GetType(TypeCode))

            mTypeName 
= c.ToString
            mType 
= Type.GetType(String.Format("System.{0}", mTypeName))

            mFieldInfo 
= mType.GetField("MaxValue")
            
If mFieldInfo Is Nothing Then Continue For

            mCurrentTypeMaxValue 
= mFieldInfo.GetValue(Nothing).ToString

            
If IsNumeric(mCurrentTypeMaxValue) Then
                
If mCurrentTypeMaxValue.Length > mMaxValue.Length Then
                    mMaxValue 
= mCurrentTypeMaxValue
                    mDataTypeCode 
= c
                
End If
            
End If

        
Next

        gUnitDataType 
= mDataTypeCode

        
'确定该数据类型下,可表示的最大位数。保证两数相乘结果仍可表示为整数。
        Dim x As Object
        x 
= ConverToUnitDataType(mMaxValue)

        
Dim mSqrtResult As String = Math.Sqrt(CDbl(x)).ToString '最大数开方

        
Dim mPointIndex As Integer = mSqrtResult.IndexOf("."c) '只取整数部分
        If mPointIndex > 0 Then
            mSqrtResult 
= mSqrtResult.Substring(0, mPointIndex)
        
End If

        
Dim mDigits As Integer = mSqrtResult.ToString.Length - 1 '可表示的最大位数是最大数开方后整数部分位数减一位

        gUnitMaxSize 
= mDigits
    
End Sub

End Class

 

Friend Class CommonFunction
    
Private Sub New()
    
End Sub

    
Public Shared Function Clone(Of T)(ByVal obj As T) As T
        
Dim tmpT As T

        
Dim mFormatter As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
        
Dim mMemoryStream As New System.IO.MemoryStream

        
Using mMemoryStream
            mFormatter.Serialize(mMemoryStream, obj)
            mMemoryStream.Position 
= 0
            tmpT 
= CType(mFormatter.Deserialize(mMemoryStream), T)
            mMemoryStream.Close()
        
End Using

        
Return tmpT
    
End Function

    
Public Shared Function SplitStringToArray(ByVal line As StringByVal digits As IntegerAs String()
        
Dim mLineLength As Integer = line.Length
        
Dim mCount As Integer = mLineLength  \ digits
        
If (mLineLength Mod digits) > 0 Then mCount += 1

        
Dim mResult(mCount - 1As String

        
Dim mCurrentIndex As Integer
        
For i As Integer = mCount - 1 To 0 Step -1
            mCurrentIndex 
= mLineLength - (mCount - i) * digits

            
If mCurrentIndex < 0 Then
                mResult(
0= line.Substring(0, mLineLength - (mCount - 1* digits)
            
Else
                mResult(i) 
= line.Substring(mCurrentIndex, digits)

            
End If

        
Next

        
Return mResult
    
End Function

End Class

 

 

<Serializable()> _
Public Class AddressInformation
    
Private gAddress As Integer = 0
    
Private gUnitNum As Integer = 0

    
Public Property Address() As Integer
        
Get
            
Return gAddress
        
End Get
        
Friend Set(ByVal value As Integer)
            gAddress 
= value
        
End Set
    
End Property


    
Public ReadOnly Property UnitNum() As Integer
        
Get
            
Return gUnitNum
        
End Get
    
End Property

    
Friend Sub Add(ByVal value As Integer)
        gAddress 
+= value
    
End Sub

    
Friend Sub SetZero()
        gAddress 
= 0
    
End Sub

    
Friend Sub Increase()
        gAddress 
+= 1
    
End Sub

    
Friend Sub ResetAddressFrom(ByVal address As IntegerByVal unitNum As Integer)
        gAddress 
= AddressConvertFromAToB(address, unitNum, gUnitNum)
    
End Sub

    
Friend Sub CopyAddressTo(ByRef addressInfo As AddressInformation)
        addressInfo.gAddress 
= AddressConvertFromAToB(gAddress, gUnitNum, addressInfo.gUnitNum)
    
End Sub

    
Friend Sub New()
    
End Sub

    
Friend Sub New(ByVal unitNum As Integer)
        gUnitNum 
= unitNum
    
End Sub

    
Public Function Clone() As AddressInformation
        
Return CommonFunction.Clone(Of AddressInformation)(Me)
    
End Function

    
Public Function ConvertTo(ByVal unitNum As IntegerAs AddressInformation
        
Dim mAddressInfo As New AddressInformation(unitNum)
        CopyAddressTo(mAddressInfo)
        
Return mAddressInfo
    
End Function

    
Private Shared Function AddressConvertFromAToB(ByVal aAddress As IntegerByVal aUnitNum As IntegerByVal bUnitNum As IntegerAs Integer
        
Return Information.AddressConvertFromAToB(aAddress, aUnitNum, bUnitNum)
    
End Function

    
Public Shadows Function ToString() As String
        
Return String.Format("UnitNum :{0}, Address :{1}", gUnitNum, gAddress)
    
End Function
End Class

 

 

<Serializable()> _
Public Class StringValue
    
Private gOrignalAddressInfo As AddressInformation
    
Private gFirstAddressInfo As AddressInformation
    
Private gLastAddressInfo As AddressInformation

    
Private gValueArray As New System.Collections.ObjectModel.Collection(Of String)

    
Friend ReadOnly Property ValueCollection() As System.Collections.ObjectModel.Collection(Of String)
        
Get
            
Return gValueArray
        
End Get
    
End Property

    
Friend ReadOnly Property OrignalAddressInfo() As AddressInformation
        
Get
            
Return gOrignalAddressInfo
        
End Get
    
End Property

    
Public ReadOnly Property FirstAddressInfo() As AddressInformation
        
Get
            
Return gFirstAddressInfo
        
End Get
    
End Property

    
Public ReadOnly Property LastAddressInfo() As AddressInformation
        
Get
            
Return gLastAddressInfo
        
End Get
    
End Property

    
Public ReadOnly Property UnitLength() As Integer
        
Get
            
Return CInt(Information.UnitMaxSize * Math.Pow(2, gFirstAddressInfo.UnitNum))
        
End Get
    
End Property

    
Public ReadOnly Property Size() As Integer
        
Get
            
Return gLastAddressInfo.Address - gFirstAddressInfo.Address + 1
        
End Get
    
End Property

    
Public ReadOnly Property FullValue() As String
        
Get
            
Return GetFullValue()
        
End Get
    
End Property

    
Private Function GetFullValue() As String

        
Return Information.GetStringsValue(gValueArray, gFirstAddressInfo.Address - gOrignalAddressInfo.Address, gFirstAddressInfo.UnitNum)
    
End Function

    
Public ReadOnly Property Value() As String
        
Get
            
Return GetValue()
        
End Get
    
End Property

    
Private Function GetValue() As String

        
Return Information.GetStringsValue(gValueArray, gFirstAddressInfo.UnitNum)
    
End Function

    
Private Sub Initialize(ByVal value As String)
        gOrignalAddressInfo 
= gFirstAddressInfo.Clone

        
If Information.IsZero(value) Then
            gValueArray.Add(
"0")
        
Else
            
'处理这种情形0000000000000000000000000012344505454564646900000000000000000
            Dim tmpValueArray As String() = Information.SplitValueToArray(value, gFirstAddressInfo.UnitNum)

            
'忽略前面是零的项;每项,如全是0用一个0表示(000000000000=0),否则忽略开头的0(00000012300=12300)
            Dim mCurrentValue As String
            
Dim mFirstIsZero As Boolean = True

            
For i As Integer = 0 To tmpValueArray.Length - 1
                mCurrentValue 
= Information.GetStringValue(tmpValueArray(i))

                mFirstIsZero 
= mFirstIsZero And mCurrentValue.Equals("0")
                
If Not mFirstIsZero Then
                    gValueArray.Add(mCurrentValue)
                
End If
            
Next

            
'最后面连续项全是0的,当进位处理,地址前移,移去这些项
            Dim mLastIsZero As Boolean = True
            
Dim mCount As Integer = 0
            
Do Until Not mLastIsZero
                mLastIsZero 
= mLastIsZero And gValueArray(gValueArray.Count - 1).Equals("0")
                
If mLastIsZero Then
                    mCount 
+= 1
                    gValueArray.RemoveAt(gValueArray.Count 
- 1)
                
End If
            
Loop

            
If mCount > 0 Then gFirstAddressInfo.Add(mCount)
        
End If


        gLastAddressInfo 
= gFirstAddressInfo.Clone
        gLastAddressInfo.Add(gValueArray.Count 
- 1)
    
End Sub

    
Friend Sub New(ByVal value As String)
        gFirstAddressInfo 
= New AddressInformation()

        Initialize(value)
    
End Sub

    
Friend Sub New(ByVal unitNum As IntegerByVal address As IntegerByVal value As String)
        gFirstAddressInfo 
= New AddressInformation(unitNum)
        gFirstAddressInfo.Address 
= address

        Initialize(value)
    
End Sub


    
Friend Sub New(ByVal addressInfo As AddressInformation, ByVal value As String)
        gFirstAddressInfo 
= addressInfo.Clone

        Initialize(value)
    
End Sub

    
Public Function Test_OutPutValueInformation() As String
        
Dim mFormat As String = "({0},{1})"

        
Dim b As New System.Text.StringBuilder
        
For i As Integer = 0 To Size - 1

            b.Append(
String.Format(mFormat, gLastAddressInfo.Address - i, gValueArray(i)))
        
Next

        
Return b.ToString
    
End Function

    
Private Function GetAddress(ByVal index As IntegerAs Integer
        
Return gLastAddressInfo.Address - index
    
End Function

    
Private Function GetIndex(ByVal Address As IntegerAs Integer
        
Return gLastAddressInfo.Address - Address
    
End Function

    
Public Function CopyToByIndex(ByVal unitNum As IntegerByVal index As IntegerAs StringValue

        
Return CopyToByIndex(unitNum, index, index)
    
End Function

    
Public Function CopyToByIndex(ByVal unitNum As IntegerByVal firstIndex As IntegerByVal lastIndex As IntegerAs StringValue
        
If (firstIndex > lastIndex) OrElse (firstIndex < 0 OrElse lastIndex > Me.Size) Then Throw New Exception("引用索引无效")

        
Dim mAddressInfo As AddressInformation = gFirstAddressInfo.ConvertTo(unitNum)
        mAddressInfo.ResetAddressFrom(GetAddress(lastIndex), gFirstAddressInfo.UnitNum) 
'地址以lastIndex地址为参照

        
Dim mValue As String
        mValue 
= Information.GetStringsValue(gValueArray, firstIndex, lastIndex, gFirstAddressInfo.UnitNum)

        
Return New StringValue(mAddressInfo, mValue)
    
End Function

    
Public Function CopyToByAddress(ByVal unitNum As IntegerByVal address As IntegerAs StringValue
        
Return CopyToByIndex(unitNum, GetIndex(address))
    
End Function

    
Public Function CopyToByAddress(ByVal unitNum As IntegerByVal firstAddress As IntegerByVal lastAddress As IntegerAs StringValue
        
Return CopyToByIndex(unitNum, GetIndex(lastAddress), GetIndex(firstAddress))
    
End Function

    
Public Function CopyTo(ByVal unitNum As IntegerAs StringValue
        
Return New StringValue(gFirstAddressInfo.ConvertTo(unitNum), Me.Value)
    
End Function

    
Public Function Clone() As StringValue
        
Return CommonFunction.Clone(Of StringValue)(Me)
    
End Function
End Class

 

测试代码:

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        BigIntLibrary.Test.Run()
    
End Sub

 

Public Class Test
    
Public Shared Sub Run()
        
Dim addressInfo As New AddressInformation(6)
        addressInfo.Address 
= 0
        
Dim Value As String = "700000000000800000000000000011111111110111111111111117880000000000000000000000088000000000000000000000000000000000000"
        Console.WriteLine(Value)

        
Dim Result As New StringValue(addressInfo, Value)
        OutPut(Result)

        OutPut(Result.CopyTo(
0))

        OutPut(Result.CopyTo(
1))

        OutPut(Result.CopyTo(
2))

        OutPut(Result.CopyTo(
3))

        OutPut(Result.CopyTo(
4))

        OutPut(Result.CopyTo(
5))

        OutPut(Result.CopyTo(
6))

        OutPut(Result.CopyTo(
5).CopyToByIndex(20))
        OutPut(Result.CopyTo(
5).CopyToByIndex(201))

    
End Sub

    
Private Shared Sub OutPut(ByVal info As StringValue)
        Console.WriteLine()
        
With info
            Console.WriteLine(
"存储指数:{0},单位大小:{1},起始地址:{2}", .FirstAddressInfo.UnitNum, .UnitLength, .FirstAddressInfo.Address)
            Console.WriteLine(
"值:{0}", .Value)
            Console.WriteLine(
"存储情形:")
            Console.WriteLine(.Test_OutPutValueInformation)
        
End With

    
End Sub
End Class

结果:

700000000000800000000000000011111111110111111111111117880000000000000000000000088000000000000000000000000000000000000

存储指数:6,单位大小:64,起始地址:0
值:700000000000800000000000000011111111110111111111111117880000000000000000000000088000000000000000000000000000000000000
存储情形:
(1,70000000000080000000000000001111111111011111111111111)(0,7880000000000000000000000088000000000000000000000000000000000000)

存储指数:0,单位大小:1,起始地址:36
值:700000000000800000000000000011111111110111111111111117880000000000000000000000088
存储情形:
(116,7)(115,0)(114,0)(113,0)(112,0)(111,0)(110,0)(109,0)(108,0)(107,0)(106,0)(105,0)(104,8)(103,0)(102,0)(101,0)(100,0)(99,0)(98,0)(97,0)(96,0)(95,0)(94,0)(93,0)(92,0)(91,0)(90,0)(89,0)(88,1)(87,1)(86,1)(85,1)(84,1)(83,1)(82,1)(81,1)(80,1)(79,1)(78,0)(77,1)(76,1)(75,1)(74,1)(73,1)(72,1)(71,1)(70,1)(69,1)(68,1)(67,1)(66,1)(65,1)(64,1)(63,7)(62,8)(61,8)(60,0)(59,0)(58,0)(57,0)(56,0)(55,0)(54,0)(53,0)(52,0)(51,0)(50,0)(49,0)(48,0)(47,0)(46,0)(45,0)(44,0)(43,0)(42,0)(41,0)(40,0)(39,0)(38,0)(37,8)(36,8)

存储指数:1,单位大小:2,起始地址:18
值:700000000000800000000000000011111111110111111111111117880000000000000000000000088
存储情形:
(58,7)(57,0)(56,0)(55,0)(54,0)(53,0)(52,8)(51,0)(50,0)(49,0)(48,0)(47,0)(46,0)(45,0)(44,1)(43,11)(42,11)(41,11)(40,11)(39,10)(38,11)(37,11)(36,11)(35,11)(34,11)(33,11)(32,11)(31,78)(30,80)(29,0)(28,0)(27,0)(26,0)(25,0)(24,0)(23,0)(22,0)(21,0)(20,0)(19,0)(18,88)

存储指数:2,单位大小:4,起始地址:9
值:700000000000800000000000000011111111110111111111111117880000000000000000000000088
存储情形:
(29,7)(28,0)(27,0)(26,8)(25,0)(24,0)(23,0)(22,1)(21,1111)(20,1111)(19,1011)(18,1111)(17,1111)(16,1111)(15,7880)(14,0)(13,0)(12,0)(11,0)(10,0)(9,88)

存储指数:3,单位大小:8,起始地址:4
值:7000000000008000000000000000111111111101111111111111178800000000000000000000000880000
存储情形:
(14,70000)(13,8)(12,0)(11,1)(10,11111111)(9,10111111)(8,11111111)(7,78800000)(6,0)(5,0)(4,880000)

存储指数:4,单位大小:16,起始地址:2
值:7000000000008000000000000000111111111101111111111111178800000000000000000000000880000
存储情形:
(7,70000)(6,800000000)(5,111111111)(4,1011111111111111)(3,7880000000000000)(2,880000)

存储指数:5,单位大小:32,起始地址:1
值:7000000000008000000000000000111111111101111111111111178800000000000000000000000880000
存储情形:
(3,700000000000800000000)(2,1111111111011111111111111)(1,78800000000000000000000000880000)

存储指数:6,单位大小:64,起始地址:0
值:700000000000800000000000000011111111110111111111111117880000000000000000000000088000000000000000000000000000000000000
存储情形:
(1,70000000000080000000000000001111111111011111111111111)(0,7880000000000000000000000088000000000000000000000000000000000000)

存储指数:2,单位大小:4,起始地址:26
值:7000000000008
存储情形:
(29,7)(28,0)(27,0)(26,8)

存储指数:2,单位大小:4,起始地址:16
值:70000000000080000000000000001111111111011111111111111
存储情形:
(29,7)(28,0)(27,0)(26,8)(25,0)(24,0)(23,0)(22,1)(21,1111)(20,1111)(19,1011)(18,1111)(17,1111)(16,1111)

如果:

Friend Class Information
    
Private Sub New()
    
End Sub

    
Private Shared gUnitMaxSize As Integer
    
Private Shared gUnitDataType As TypeCode

    
''' <summary>
    ''' 运算单元最大位数
    ''' </summary>
    Public Shared ReadOnly Property UnitMaxSize() As Integer
        
Get
            
Return gUnitMaxSize '测试,不用太大。gUnitMaxSize 
        End Get
    
End Property

修改一下测试代码:

Public Class Test
    
Public Shared Sub Run()
        
Dim addressInfo As New AddressInformation(6)
        addressInfo.Address 
= 0
        
Dim Value As String = "700000000000800000000000000011111111110111111111111117880000000000000000000000088000000000000000000000000000000000000"
        Console.WriteLine(Value)

        
Dim Result As New StringValue(addressInfo, Value)
        OutPut(Result)

        OutPut(Result.CopyTo(
0))

        OutPut(Result.CopyTo(
1))

        OutPut(Result.CopyTo(
2))

        OutPut(Result.CopyTo(
3))

        OutPut(Result.CopyTo(
4))

        OutPut(Result.CopyTo(
5))

        OutPut(Result.CopyTo(
6))

        Result 
= Result.CopyTo(5)
        OutPut(Result.CopyToByIndex(
2, Result.Size - 1))
        OutPut(Result.CopyToByIndex(
20, Result.Size - 1))
        OutPut(Result.CopyToByAddress(
2, Result.FirstAddressInfo.Address, Result.LastAddressInfo.Address))

结果是:

700000000000800000000000000011111111110111111111111117880000000000000000000000088000000000000000000000000000000000000

存储指数:6,单位大小:896,起始地址:0
值:700000000000800000000000000011111111110111111111111117880000000000000000000000088000000000000000000000000000000000000
存储情形:
(0,700000000000800000000000000011111111110111111111111117880000000000000000000000088000000000000000000000000000000000000)

存储指数:0,单位大小:14,起始地址:2
值:70000000000080000000000000001111111111011111111111111788000000000000000000000008800000000
存储情形:
(8,70000)(7,8000000)(6,11111)(5,11111011111111)(4,11111178800000)(3,0)(2,8800000000)

存储指数:1,单位大小:28,起始地址:1
值:70000000000080000000000000001111111111011111111111111788000000000000000000000008800000000
存储情形:
(4,70000)(3,800000000000000011111)(2,1111101111111111111178800000)(1,8800000000)

存储指数:2,单位大小:56,起始地址:0
值:700000000000800000000000000011111111110111111111111117880000000000000000000000088000000000000000000000000000000000000
存储情形:
(2,70000)(1,8000000000000000111111111101111111111111178800000)(0,88000000000000000000000000000000000000)

存储指数:3,单位大小:112,起始地址:0
值:700000000000800000000000000011111111110111111111111117880000000000000000000000088000000000000000000000000000000000000
存储情形:
(1,70000)(0,800000000000000011111111110111111111111117880000000000000000000000088000000000000000000000000000000000000)

存储指数:4,单位大小:224,起始地址:0
值:700000000000800000000000000011111111110111111111111117880000000000000000000000088000000000000000000000000000000000000
存储情形:
(0,700000000000800000000000000011111111110111111111111117880000000000000000000000088000000000000000000000000000000000000)

存储指数:5,单位大小:448,起始地址:0
值:700000000000800000000000000011111111110111111111111117880000000000000000000000088000000000000000000000000000000000000
存储情形:
(0,700000000000800000000000000011111111110111111111111117880000000000000000000000088000000000000000000000000000000000000)

存储指数:6,单位大小:896,起始地址:0
值:700000000000800000000000000011111111110111111111111117880000000000