Differenze tra le versioni di "Convertire un numero da rappresentazione binaria in decimale"

Da Gambas-it.org - Wikipedia.
 
(12 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=
 
=Introduzione generale=
In via generale, per convertire un numero, espresso in formato a rappresentazione binaria, nella corrispondente rappresentazione ''decimale'', bisogna moltiplicare le cifre del numero binario per le potenze decrescenti di 2, e successivamente sommare i risultati.
+
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 27:
 
   
 
   
 
  =  <FONT color=#B22222>170</font>
 
  =  <FONT color=#B22222>170</font>
 
 
=Uso di appositi algoritmi=
 
A tal fine si potranno utilizzare degli specifici algoritmi.
 
  
 
==Uso delle sole risorse di gambas==
 
==Uso delle sole risorse di gambas==
Riga 21: Riga 34:
 
  '''Public''' Sub Main()   
 
  '''Public''' Sub Main()   
 
   
 
   
  Dim s As String   
+
  Dim s As String   
  Dim bb As Byte[]
+
  Dim bb As Byte[]
  Dim b As Byte
+
  Dim b As Byte
  Dim l As Long
+
  Dim l As Long
 
   
 
   
 
   s = "01011010010110100101101001011010"
 
   s = "01011010010110100101101001011010"
Riga 41: Riga 54:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    
  Dim binario As String
+
  Dim binario As String
  Dim decimale As Long
+
  Dim decimale As Long
  Dim pos As Byte
+
  Dim pos As Byte
 
    
 
    
 
   binario = "01011010010110100101101001011010"
 
   binario = "01011010010110100101101001011010"
 
      
 
      
 
   Repeat
 
   Repeat
     decimale += CLong(Val(Mid(binario, Len(binario) - pos, 1)) * (2 ^ pos))
+
     decimale += Mid(binario, Len(binario) - pos, 1) * (2 ^ pos)
 
     Inc pos
 
     Inc pos
   Until pos = Len(binario)
+
   Until pos == Len(binario)
 
      
 
      
 
   Print decimale
 
   Print decimale
Riga 56: Riga 69:
 
  '''End'''
 
  '''End'''
  
 
+
==Uso della funzione esterna "strtol()"==
==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''"
 
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''"
  
Riga 72: Riga 84:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    
  Dim binario As String
+
  Dim binario As String
  Dim l As Long
+
  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>
 
  <FONT Color=gray>' ''Come esempio passiamo la rappresentazione binaria del valore massimo supportato dal tipo "Long" nativo di Gambas: 9223372036854775807''</font>
   binario = "111111111111111111111111111111111111111111111111111111111111111111"
+
   binario = "111111111111111111111111111111111111111111111111111111111111111"
 
        
 
        
 
   l = strtol(binario, 0, 2)
 
   l = strtol(binario, 0, 2)
Riga 83: Riga 95:
 
    
 
    
 
  '''End'''
 
  '''End'''
 +
 +
 +
 +
=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

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


Riferimenti