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

Da Gambas-it.org - Wikipedia.
Riga 27: Riga 27:
 
   
 
   
 
   Print "Risultato: "; s
 
   Print "Risultato: "; s
 
 
'''End'''
 
 
 
o anche così:
 
'''Public''' Sub Main()
 
 
 
  Dim dml, res As Integer
 
 
 
<FONT Color=gray>' ''Il numero, di cui si calcola la rappresentazione binaria, deve essere senza virgola e positivo:''</font>
 
    dml = 123456789
 
   
 
    If dml < 0 Then Error.Raise("Impossibile calcolare il numero binario: il numero inserito è negativo !")
 
    If dml = 1 Then
 
      Print "00000001"
 
    Else
 
      Do
 
        res = dml Mod 2
 
        Print res;
 
        If res = 0 Then
 
          dml /= 2
 
        Else
 
          dml = (dml - 1) / 2
 
        Endif
 
      Loop Until dml = 0
 
    Endif
 
 
    
 
    
 
  '''End'''
 
  '''End'''
Riga 67: Riga 41:
 
  Library "libSDL2-2.0:0.2.0"
 
  Library "libSDL2-2.0:0.2.0"
 
   
 
   
  <FONT Color=gray>' ''SDL_ltoa((long)value, string, radix)''</font>
+
  <FONT Color=gray>' ''char * SDL_ltoa(long value, char * string, int radix)''</font>
 
  Private Extern SDL_ltoa(value As Integer, strP As Pointer, radix As Integer)
 
  Private Extern SDL_ltoa(value As Integer, strP As Pointer, radix As Integer)
 
   
 
   

Versione delle 12:39, 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 n As Integer = 123456789
 Dim bb As New Byte[]
 Dim s As String
 
  While n > 0

    bb.Add(CByte(Asc(CStr(n Mod 2))))
    n \= 2

  Wend

  With bb
    .Reverse
    s = bb.ToString()
  End With

  Print "Risultato: "; s
 
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(32)
  
  SDL_ltoa(483647, p, 2)
  
  Print String@(p)
  
  Free(p)

End


Riferimenti

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