Convertire un numero da Decimale in Binario: differenze tra le versioni
Vai alla navigazione
Vai alla ricerca
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| Riga 29: | Riga 29: | ||
'''End''' | '''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''' | |||
Versione delle 13:11, 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
o anche così:
Public Sub Main()
Dim dml, res As Integer
' Il numero, di cui si calcola la rappresentazione binaria, deve essere senza virgola e positivo:
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
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" ' SDL_ltoa((long)value, string, 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