Differenze tra le versioni di "Convertire un numero da Decimale in Binario"

Da Gambas-it.org - Wikipedia.
Riga 10: Riga 10:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
   Dim n As Integer = 123456789
+
   Dim i As Integer = 123456789
 
   Dim bb As New Byte[]
 
   Dim bb As New Byte[]
   Dim s As String
+
   Dim b As Byte
 
    
 
    
   While n > 0
+
   While i > 0
+
     bb.Add(CByte(i Mod 2))
     bb.Add(CByte(Asc(CStr(n Mod 2))))
+
     i \= 2
     n \= 2
 
 
 
   Wend
 
   Wend
 
   
 
   
   With bb
+
   bb.Reverse
    .Reverse
+
 
    s = bb.ToString()
+
  For b = 0 To bb.Max
  End With
+
    Print bb[b];
+
   Next
   Print "Risultato: "; s
+
   
 
 
 
  '''End'''
 
  '''End'''
  

Versione delle 13:54, 24 feb 2016

Per convertire un numero da Decimale in rappresentazione binaria, sono possibili almeno tre modalità.


Uso della funzione Bin() di Gambas

Come è noto, si può far uso agevolmente dell'apposita funzione Bin().


Uso di apposito algoritmo

Volendo, è ovviamente possibile raggiungere il medesimo risultato con apposito codice, come ad esempio il seguente:

Public Sub Main()

 Dim i As Integer = 123456789
 Dim bb As New Byte[]
 Dim b As Byte
 
  While i > 0
    bb.Add(CByte(i Mod 2))
    i \= 2
  Wend

  bb.Reverse
  
  For b = 0 To bb.Max
    Print bb[b];
  Next
    
End


Uso della funzione esterna SDL_ltoa() del API di SDL2

E' inoltre possibile far uso della funzione esterna ltoa() del API di SDL2.

In tal caso sarà necessario installare nel sistema e richiamare nell'applicazione Gambas la libreria dinamica e condivisa: "libSDL2-2.0.so.0.2.0"


Mostriamo un semplice esempio:

Library "libSDL2-2.0:0.2.0"

' char * SDL_ltoa(long value, char * string, int radix)
Private Extern SDL_ltoa(value As Integer, strP As Pointer, radix As Integer)


Public Sub Main()

 Dim p As Pointer
 
  p = Alloc(64)
  
  SDL_ltoa(483647, p, 2)
  
  Print String@(p)
  
  Free(p)

End


Riferimenti

https://fossies.org/dox/SDL2-2.0.3/SDL__string_8c.html