Differenze tra le versioni di "Convertire un numero da rappresentazione binaria in decimale"
(36 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
− | + | =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 * 2<SUP>7</sup>) + (0 * 2<SUP>6</sup>) + (1 * 2<SUP>5</sup>) + (0 * 2<SUP>4</sup>) + (1 * 2<SUP>3</sup>) + (0 * 2<SUP>2</sup>) + (1 * 2<SUP>1</sup>) + (0 * 2<SUP>0</sup>) = | ||
− | + | = (1 * 128) + (0 * 64) + (1 * 32) + (0 * 16) + (1 * 8) + (0 * 4) + (1 * 2) + (0 * 1) = | |
− | + | = 128 + 0 + 32 + 0 + 8 + 0 + 2 + 0 = | |
+ | |||
+ | = <FONT color=#B22222>170</font> | ||
+ | |||
+ | ==Uso delle sole risorse di gambas== | ||
+ | Con l'uso delle sole risorse di Gambas possiamo adottare almeno un paio di modalità. | ||
+ | |||
+ | ===1<SUP>a</sup> 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 | ||
+ | |||
+ | ===2<SUP>a</sup> 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" | ||
+ | |||
+ | <FONT Color=gray>' ''long int strtol (const char *__restrict __nptr, char **__restrict __endptr, int __base)'' | ||
+ | ' ''Convert a string to a long integer.''</font> | ||
+ | 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 | ||
− | + | <FONT Color=gray>' ''Come esempio passiamo la rappresentazione binaria del valore massimo supportato dal tipo "Long" nativo di Gambas: 9223372036854775807''</font> | |
− | + | binario = "111111111111111111111111111111111111111111111111111111111111111" | |
− | ''' | + | |
+ | l = strtol(binario, 0, 2) | ||
+ | |||
+ | Print l | ||
+ | |||
+ | End | ||
− | = | + | =Riferimenti= |
− | + | * https://cplusplus.com/reference/cstdlib/strtol/ | |
+ | * https://www.tutorialspoint.com/c_standard_library/c_function_strtol.htm |
Versione attuale delle 16:26, 1 lug 2024
Indice
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