Puoi accorciare un po', usando una variabile vettoriale di tipo Byte[ ] ed in particolare il suo Metodo .Reverse( ):
Public Sub Main()
Dim n, b, c As Integer
Dim bb As New Byte[]
n = 23750
Print "La rappresentazione binaria di "; n; " è ";
While n > 0
b = n Mod 2
bb.Push(b)
If b <> 0 Then Inc c
n = n \ 2
Wend
bb.Reverse()
For b = 0 To bb.Max
Print bb[b];
Next
Print " e contiene "; c; " bit a 1"
End
Così è meglio.
Se avessi visto prima
questa lezione, mi sarei risparmiato tanta fatica, anche se occorre dire che senza un po di fatica le cose non si capiscono a fondo.
Beh a fondo forse è troppo
Comunque sia, per sintetizzare, così come si può riottenere un numero decimale dividendolo per 10 invertendo i suoi resti...:
Prendiamo come esempio il numero 451 :
451 / 10 = 45 Resto 1 (451 Mod 10 = 1)
45 / 10 = 4 Resto 5 (45 Mod 10 = 5)
4 / 10 = 0 Resto 4 (4 Mod 10 = 4)
...allo stesso modo possiamo ottenerne il corrispondente binario invertendo i resti della divisione per due:
451 / 2 = 225 Resto 1 (451 mod 2 = 1)
225 / 2 = 112 Resto 1 (225 Mod 2 = 1)
112 / 2 = 56 Resto 0 (112 Mod 2 = 0)
56 / 2 = 28 Resto 0 (56 Mod 2 = 0)
28 / 2 = 14 Resto 0 (28 Mod 2 = 0)
14 / 2 = 7 Resto 0 (14 Mod 2 = 0)
7 / 2 = 3 Resto 1 (7 Mod 2 = 1)
3 / 2 = 1 Resto 1 (3 Mod 2 = 1)
1 / 2 = 0 Resto 1 (1 Mod 2 = 1)
Raggiunto lo zero si termina.
Operazioni inverse (moltiplicazioni) per ottenere il decimale dal binario.