Differenze tra le versioni di "Convertire un numero da rappresentazione binaria in decimale"
(27 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: | Convertiamo, per esempio il numero binario 10101010: | ||
Riga 10: | Riga 28: | ||
= <FONT color=#B22222>170</font> | = <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à=== | ===1<SUP>a</sup> modalità=== | ||
− | '''Public''' Sub | + | '''Public''' Sub Main() |
− | + | Dim s As String | |
− | + | Dim bb As Byte[] | |
− | + | Dim b As Byte | |
− | + | Dim l As Long | |
− | s = | + | s = "01011010010110100101101001011010" |
bb = Byte[].FromString(s).Reverse() | bb = Byte[].FromString(s).Reverse() | ||
− | For | + | For b = 0 To bb.Max |
− | l += | + | l += Clong((bb[b] - 48) * (2 ^ b)) |
Next | Next | ||
Riga 34: | Riga 51: | ||
'''End''' | '''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). | |
− | '''Public''' Sub Main() | + | |
+ | 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 | + | Print l |
'''End''' | '''End''' | ||
Riga 54: | Riga 98: | ||
− | + | =Riferimenti= | |
− | = | + | * https://cplusplus.com/reference/cstdlib/strtol/ |
− | + | * https://www.tutorialspoint.com/c_standard_library/c_function_strtol.htm |
Versione attuale delle 14:36, 15 ago 2022
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