Differenze tra le versioni di "Convertire un numero da Decimale in Binario"
Da Gambas-it.org - Wikipedia.
Riga 27: | Riga 27: | ||
Next | Next | ||
+ | '''End''' | ||
+ | |||
+ | |||
+ | o anche il seguente (per convertire tipi di valori non superiori a 32 bit): | ||
+ | '''Public''' Sub Main() | ||
+ | |||
+ | Dim b As Byte | ||
+ | Dim i As Integer | ||
+ | |||
+ | i = 1257421 | ||
+ | |||
+ | For b = 0 To 31 | ||
+ | If i And (&80000000& \ CInt(2 ^ b)) Then | ||
+ | Print "1"; | ||
+ | Else | ||
+ | Print "0"; | ||
+ | Endif | ||
+ | |||
+ | Next | ||
+ | |||
'''End''' | '''End''' | ||
Versione delle 15:52, 2 mar 2016
Per convertire un numero da Decimale in rappresentazione binaria, sono possibili almeno tre modalità.
Indice
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 Dim bb As New Byte[] Dim b As Byte i = 123456789 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
o anche il seguente (per convertire tipi di valori non superiori a 32 bit):
Public Sub Main() Dim b As Byte Dim i As Integer i = 1257421 For b = 0 To 31 If i And (&80000000& \ CInt(2 ^ b)) Then Print "1"; Else Print "0"; Endif 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(123456789, p, 2) Print String@(p) Free(p) End