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

Da Gambas-it.org - Wikipedia.
 
Riga 32: Riga 32:
  
 
===1<SUP>a</sup> modalità===  
 
===1<SUP>a</sup> modalità===  
  '''Public''' Sub Main()   
+
  Public Sub Main()   
 
   
 
   
 
   Dim s As String   
 
   Dim s As String   
Riga 49: Riga 49:
 
   Print "Il corrispondente valore decimale è: "; l
 
   Print "Il corrispondente valore decimale è: "; l
 
   
 
   
  '''End'''
+
  End
  
 
===2<SUP>a</sup> modalità===  
 
===2<SUP>a</sup> modalità===  
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
 
   Dim binario As String
 
   Dim binario As String
Riga 67: Riga 67:
 
   Print decimale
 
   Print decimale
 
    
 
    
  '''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'' .
  
 
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).
 
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).
Riga 82: Riga 82:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
 
   Dim binario As String
 
   Dim binario As String
Riga 94: Riga 94:
 
   Print l
 
   Print l
 
    
 
    
  '''End'''
+
  End
  
  

Versione attuale delle 16:26, 1 lug 2024

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