Utilizzando DEC2BIN() con grandi numeri

Sto cercando di convertire 4503599627370495 in binario in Excel. DEC2BIN() restituisce l’errore #NUM! errore perché DEC2BIN non può gestire un grande numero.

Qualche idea su come potrei essere in grado di farlo funzionare?

InformationsquelleAutor user3367131 | 2014-03-01



6 Replies
  1. 6

    Thanx JustinDavies – che era proprio quello che mi serviva, ma che è andato in un loop infinito, se approvata, a-ve numero. La mia modifica:

    Function DecToBin(ByVal DecimalIn As Variant, Optional NumberOfBits As Variant) As String
      DecToBin = ""
      DecimalIn = CDec(DecimalIn)
      If DecimalIn < 0 Then
        DecToBin = "Error - Number negative"
        Exit Function
      End If
      Do While DecimalIn <> 0
        DecToBin = Trim$(Str$(DecimalIn - 2 * Int(DecimalIn / 2))) & DecToBin
        DecimalIn = Int(DecimalIn / 2)
      Loop
      If Not IsMissing(NumberOfBits) Then
        If Len(DecToBin) > NumberOfBits Then
          DecToBin = "Error - Number too large for bit size"
        Else
          DecToBin = Right$(String$(NumberOfBits, "0") & _
          DecToBin, NumberOfBits)
        End If
      End If
    End Function
  2. 4

    Vedere VBA postato qui

    ' The DecimalIn argument is limited to 79228162514264337593543950245
    ' (approximately 96-bits) - large numerical values must be entered
    ' as a String value to prevent conversion to scientific notation. Then
    ' optional NumberOfBits allows you to zero-fill the front of smaller
    ' values in order to return values up to a desired bit level.
    Function DecToBin(ByVal DecimalIn As Variant, Optional NumberOfBits As Variant) As String
      DecToBin = ""
      DecimalIn = CDec(DecimalIn)
      Do While DecimalIn <> 0
        DecToBin = Trim$(Str$(DecimalIn - 2 * Int(DecimalIn / 2))) & DecToBin
        DecimalIn = Int(DecimalIn / 2)
      Loop
      If Not IsMissing(NumberOfBits) Then
        If Len(DecToBin) > NumberOfBits Then
          DecToBin = "Error - Number too large for bit size"
        Else
          DecToBin = Right$(String$(NumberOfBits, "0") & _
          DecToBin, NumberOfBits)
        End If
      End If
    End Function
  3. 0

    Ho bisogno di una funzione VBA per convertire Excel numeri interi in formato decimale a binario, dato che MS non è riuscito a me, ancora una volta. Mi è venuta un’idea, ma ho dovuto accettare una stringa di quelli & zeri come output, che era OK per me. Esso utilizza il log in base 2, che può essere unico (o no?) e funziona per tutti i numeri interi positivi in cui si trova.

    Function Dec_Bin(dx As Integer) As String
        Dim x As Integer
        Dim y As Long
        Dim z As Integer
        Dim zz As Double
        Dim ch As String
        Dim str As String, s1 As String
        Dim lead As Boolean
    
        ch = String(15, "0")
    '    Stop
        zz = Log(dx) /Log(2)
        z = Fix(zz)
        y = dx - 2 ^ z
        z = 15 - z
        Mid(ch, z, 1) = "1"
        While y > 0
            zz = Log(y) /Log(2)
            z = Fix(zz)
            y = y - 2 ^ z
            z = 15 - z
            Mid(ch, z, 1) = "1"
            Wend
    
        ch = ch & "B"
        Dec_Bin = ch
    End Function
    
  4. 0

    Questa funzione converte grande come un Doppio grado di tenere.
    Non ho provato con valori negativi, però.

    Function cn(ByVal n As Double, ByVal s As Double)
      'n the number to convert
      's the numberic system to convert to.
      'This function can convert to binary all the way to the length of the
      'digits string and all in between.
    
      Dim x As Double  'The exponent without decimals
      Dim xx As Double 'The exponent with decimals, if any
      Dim r As String  'The return string
      Dim p As Integer 'Posistion of the digit in the return string
      Dim L As Long    'Length of the string return string
      Dim d            '(d+1) because mid() does not accept 0.
                       'The position of the digit in the digits string.
     Dim v As Double   'The numeric value of the position 
                       'of the digit in the return string
      Dim digits As String
      digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    Start:
    
      If n > 0 Then
         xx = Log(n) /Log(s)
         x = Int(xx)
      End If
      p = x + 1
      If r = "" Then
        r = String(p, "0")
        L = p
      End If
      v = s ^ x
      d = n \ v
      Mid(r, L - x, 1) = Mid(digits, d + 1, 1)
      n = n - (v * d)
      If n <> 0 Then GoTo Start
      cn = r
    End Function
    
  5. 0

    Normalmente, quando ho bisogno di sapere il binario di un valore decimale, è sempre interessante vedere il valore esadecimale. La funzione non usare MOD o HEX() per il grande numero dal momento che Microsoft ha limitato, per cui non è effettuata manualmente per numeri molto grandi.

    Bino(Valore Byte)

    Valore può essere un numero intero decimale di un numero o di una cella contenuta, piccolo o superbig.
    Byte è opzionale, standard di 2, automatica.

    =Bino(A1,4)

    Il numero o di byte e bit presentato è automatica in base al suo valore standard minimo di 2 byte, ma è possibile pad con extra zero byte a sinistra, l’utilizzo opzionale byte argomento. L’esempio sopra mostra A1 con 4 byte e 32 bit, anche se A1 contiene una singola cifra numerica, o sarà necessario utilizzare più di byte e bit, se maggiore di 4.

    =Bino(A1)

    Mostra A1 con un minimo di 2 byte e 16 bit, o più se necessario.
    Per una migliore visualizzazione, formato binario ha stuzzichini separati da “-” e byte da “|”

    =Bino(129) = 0x0081 = 0000-0000|1000-0001

    =Bino(129,1) = 0x81 = 1000-0001

    =Bino(257,1) = 0x0101 = 0000-0001|0000-0001

    La funzione è truccato per inserire messaggi di Errore in CELLA nel caso in cui il numero è negativo o di byte > 10. Può essere facilmente rimosso o modificato.

    Mi ha aiutato durante la prova di VBA simulazione di un sacco di matematica per l’ottimizzazione codice per microcontrollori ad 8 bits (AVR), il montaggio, la creazione di routine per Sin(x) e Ln(x) con una precisione di 16 bit.

    Public Function Bino(ByVal Valo As Double, Optional ByVal Bytes As Long = 2) As String
    Dim Conta
    Dim Resul as String
    Dim Bits
    Dim SA As Double
    Dim SB As Double
    Dim SX As String
    
    If Valo < 0 Then
       Bino = "[Err: Negative]"
       Exit Function
       End If
    
    If Bytes > 4 Then
       Bino = "[Err: Bytes > 10]"
       Exit Function
       End If
    
    ValoHex = ""
    SB = Valo
    Do While SB > 1
       SA = SB /16
       ValoHex = Hex(Int(16 * (SA - Int(SA)))) & ValoHex
       SB = SA
    Loop
    
    If Len(ValoHex) Mod 2 = 1 Then ValoHex = "0" & ValoHex
    Zeroz = Bytes * 2 - Len(ValoHex)
    If Zeroz = 2 Then ValoHex = "00" & ValoHex
    If Zeroz = 4 Then ValoHex = "0000" & ValoHex
    ValoHexLen = Len(ValoHex)
    ValoHex = "0x" & ValoHex
    
    If Bytes < ValoHexLen Then Bytes = ValoHexLen /2
    Bits = Bytes * 8 - 1
    For Conta = 0 To Bits
        Div = ""
        If Conta And Conta Mod 4 = 0 Then Div = "-"
        If Conta And Conta Mod 8 = 0 Then Div = "|"
        If Int(Valo /2) = Valo /2 Then Bitt = 0 Else Bitt = 1
        Resul = Bitt & Div & Resul
        Valo = Int(Valo /2)
    Next Conta
    
    Resul = ValoHex & " = " & Resul
    Bino = Resul
    
    End Function
    

Lascia un commento