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

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
 +
=Conversione rapida con i caratteri '''&x'''=
 +
La modalità più rapida per esffettuare la conversione dalla rappresentazione binaria nel corrispondente tipo di dato nativo di Gambas è sufficiente anteporre alla rappresentazione binaria i simboli '''&x''', come segue:
 +
Print &x11111110
 +
 +
 +
=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, nel corrispondente tipo di dato ''[https://it.wikipedia.org/wiki/Tipo_primitivo primitivo]'' 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, nel corrispondente tipo di dato ''[https://it.wikipedia.org/wiki/Tipo_primitivo primitivo]'' decimale, bisogna moltiplicare le cifre del numero binario per le potenze decrescenti di 2, e successivamente sommare i risultati.
Riga 10: Riga 18:
 
   
 
   
 
  =  <FONT color=#B22222>170</font>
 
  =  <FONT color=#B22222>170</font>
 
 
=Conversione rapida con i caratteri '''&x'''=
 
La modalità più rapida per esffettuare la conversione e ottenere il numero in un tipo di dato nativo di Gambas è anteporre alla rappresentazione binaria i simboli '''&x''', come segue:
 
Print &x11111110
 
 
 
=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 60: Riga 59:
 
    
 
    
 
  '''End'''
 
  '''End'''
 
  
 
==Uso della funzione esterna ''strtol( )''==
 
==Uso della funzione esterna ''strtol( )''==

Versione delle 08:54, 12 ago 2022

Conversione rapida con i caratteri &x

La modalità più rapida per esffettuare la conversione dalla rappresentazione binaria nel corrispondente tipo di dato nativo di Gambas è sufficiente anteporre alla rappresentazione binaria i simboli &x, come segue:

Print &x11111110


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, nel corrispondente tipo di dato primitivo 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 += CLong(Val(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 = "111111111111111111111111111111111111111111111111111111111111111111"
      
  l = strtol(binario, 0, 2)
  
  Print l
  
End