E' in arrivo sul terzo binario...

Raccolgo qui un paio di utili funzioni per esprimere la conversione da numero binario a numero decimale e viceversa, frutto di un suggerimento di qualche anno fa del vecchio amico Diego Cattaruzza. La prima funzione è DeToBin e converte un numero decimale in stringa che rappresenta il numero in formato binario. Opzionalmente si può specificare il numero di cifre binarie restituite. Se non si passa questo parametro la funzione calcola il numero di cifre minimo necessario a rappresentare l'intero numero.
Option Explicit

'converte un numero decimale nel corrispondente binario
'esempio di utilizzo: DecToBin(1503) ---> "10111011111"
'esempio di utilizzo: DecToBin(1503, 15) ---> "000010111011111"
'se il parametro size non è stato fornito, calcola il numero di cifre necessarie
'calcolando il logaritmo in base 2 del numero fornito.
'La formula del logaritmo di un numero n in base x è data dalla divisione del
'logaritmo naturale del numero con il logaritmo naturale della base x
'"size" viene aumentato di uno perchè la potenza del due parte da zero
Function DecToBin(num As Long, Optional size As Integer) As String
Dim i As Long, bin As String

    If size = 0 Then size = Int(Log(num) / Log(2)) + 1
    
    For i = 0 To size - 1
        bin = IIf(num And 2 ^ i, "1", "0") & bin
    Next
    DecToBin = bin
End Function

La seconda funzione è l'inversa, BinToDec, accetta solo il numero binario da convertire sotto forma di stringa e restituisce il corrispondente numero in base 10.
Option Explicit

'converte un numero binario (stringa) nel corrispondente decimale
'esempio di utilizzo: BinToDec("10010") ---> 18
Function BinToDec(bin As String) As Long
Dim total As Long, power As Long, i As Long
    power = Len(bin) - 1
    For i = 1 To Len(bin)
        If Mid(bin, i, 1) = "1" Then total = total + 2 ^ power
        power = power - 1
    Next
    BinToDec = total
End Function
Niente di trascendente, ma due funzioni utili e pratiche in diverse occasioni.

posted @ domenica 22 marzo 2015 13:39

Print

Comments on this entry:

No comments posted yet.

Your comment:



 (will not be displayed)


 
 
 
Please add 4 and 7 and type the answer here:
 

Live Comment Preview: