Convertire un numero da rappresentazione binaria in decimale
Conversione rapida con i caratteri &x
Una modalità rapida, per effettuare la conversione dalla rappresentazione binaria in quella decimale, è di anteporre alla rappresentazione binaria i simboli &x, come segue:
Print &x11111110
oppure, avendo la rappresentazione binaria in formato stringa, è di usare la funzione "Val()" e i predetti caratteri &x:
i = Val("&x11111110")
Conversione con il carattere %
Un'altra modalità prevede l'uso del carattere %, anteponendolo alla rappresentazione binaria del valore da convertire:
Print %11111110
oppure, avendo la rappresentazione binaria in formato stringa, l'uso della funzione nativa "Val()" anteponendo alla stringa di caratteri della rappresentazione binaria il carattere %:
Print Val("%11111110")
Uso di appositi algoritmi
Si potranno anche utilizzare specifici algoritmi.
Introduzione generale
In via generale, per convertire un numero, espresso in formato a rappresentazione binaria in quella decimale, bisogna moltiplicare le cifre del numero binario per le potenze decrescenti di 2, e successivamente sommare i risultati.
Convertiamo, per esempio il numero binario 10101010:
(1 * 27) + (0 * 26) + (1 * 25) + (0 * 24) + (1 * 23) + (0 * 22) + (1 * 21) + (0 * 20) = = (1 * 128) + (0 * 64) + (1 * 32) + (0 * 16) + (1 * 8) + (0 * 4) + (1 * 2) + (0 * 1) = = 128 + 0 + 32 + 0 + 8 + 0 + 2 + 0 = = 170
Uso delle sole risorse di gambas
Con l'uso delle sole risorse di Gambas possiamo adottare almeno un paio di modalità.
1a modalità
Public Sub Main()
Dim s As String
Dim bb As Byte[]
Dim b As Byte
Dim l As Long
s = "01011010010110100101101001011010"
bb = Byte[].FromString(s).Reverse()
For b = 0 To bb.Max
l += Clong((bb[b] - 48) * (2 ^ b))
Next
Print "Il corrispondente valore decimale è: "; l
End
2a modalità
Public Sub Main()
Dim binario As String
Dim decimale As Long
Dim pos As Byte
binario = "01011010010110100101101001011010"
Repeat
decimale += Mid(binario, Len(binario) - pos, 1) * (2 ^ pos)
Inc pos
Until pos == Len(binario)
Print decimale
End
Uso della funzione esterna "strtol()"
La funzione strtol( ), dichiarata nel file header "/usr/include/stdlib.h", converte un numero da rappresentazione stringa in un valore di tipo "long int", come definito nel file header "/usr/include/limits.h"
Dunque si passerà a detta funzione esterna una stringa contenente la rappresentazione binaria del valore da convertire, avendo cura di porre il terzo parametro della funzione medesima a 2 (base binaria).
Mostriamo un semplice esempio:
Library "libc:6"
' long int strtol (const char *__restrict __nptr, char **__restrict __endptr, int __base)
' Convert a string to a long integer.
Private Extern strtol(__nptr As String, __endptr As Pointer, __base As Integer) As Long
Public Sub Main()
Dim binario As String
Dim l As Long
' Come esempio passiamo la rappresentazione binaria del valore massimo supportato dal tipo "Long" nativo di Gambas: 9223372036854775807
binario = "111111111111111111111111111111111111111111111111111111111111111"
l = strtol(binario, 0, 2)
Print l
End