C'è una funzione o un algoritmo breve per ottenere la conversione di un numero binario in decimale ?
Io per ora mi sono dovuto intentare 'sto accrocco: :specchio:
' Gambas class file
Private c[32] As Integer
PUBLIC SUB Button1_Click()
Dim b, e As Integer
Dim a As String
Dim d As Integer = 1
a = InputBox("Immetti un numero binario:")
If a = Null Then Return
For b = Len(a) To 1 Step -1
If b = Len(a) Then
Select Case Right$(a, 1)
Case 1
c[b] = 1
d = 1
Case 0
c[b] = 0
End Select
Else
d = d * 2
If Mid$(a, b, 1) = 1 Then
c[b] = d
Else
c[b] = 0
Endif
Endif
e = e + c[b]
Next
Print "Corrisponde al numero:"
Print " - decimale: " & e
Print " - esadecimale: "; Hex$(Str(e))
END
:rolleyes:
Bel quesito!
Guardando il codice che hai postato, ho notato che tu prevedi il trattamento di valori "1" o "0" fino ad un massimo di 32 ricorrenze, ma non mi sembra che li consideri vincolati a gruppi di almeno 4 crt (crt=caratteri) alla volta. Gambas contiene le seguenti funzioni di conversione attinenti al tuo quesito: Cint, CShort, Cfloat e CByte. Però tu hai la necessità di ottenere prima il valore binario puro corrispondente al valore di partenza contenuto nella variabile "c". Occorerebbe perciò come primo passo ottenere il valore binario puro corrispondente. Perciò, secondo me, a questo punto, potresti considerare un contatore numerico dove vai a sommare il risultato di ciascun valore immesso per la potenza di 2 corrispondenmte alla posizione del crt in trattamento.
Es.: Se il valore da trattare è 10010101, partendo dalla posizione all'estrema destra del valore, potresti fare:
1x2^0 +
0x2^1 +
1x2^2 +
0x2^3 +
1x2^4 +
0x2^5 +
0x2^6 +
1x2^7 +
=149 che tradotto in codice, potrebbe essere:
Dim b, e As Integer
Dim a As String
Dim Intero as Integer
Dim Esponente as Integer
'... bla ... bla ... bla ...
Esponente = 0
For b = Len(a) To 1 Step -1
crt=Int(Val(mid(a,b)))
Intero =crt*2^Esponente
Esponente += 1
next
Print Intero
:ciao:
Uhmmm... niente male, Picavbg, niente male ! Il principio è molto interessante.
Ho però ho dovuto apportare qualche integrazione al tuo codice, così:
Dim b, e As Integer
Dim a As String
Dim Intero, InteroFinale As Integer
Dim Esponente, crt As Integer
' ...... ..... .. .. .. ...
Esponente = 0
For b = Len(a) To 1 Step -1
crt = Int(Val(Mid(a, b, 1)))
Intero = crt * 2 ^ Esponente
Esponente += 1
InteroFinale = InteroFinale + Intero
Next
Print InteroFinale