Newsgroup: it.comp.lang.visual-basic
Titolo: Decimane -> binario

esiste una funzione proprietaria di vb6 che mi permetta di convertire un
numero decimale in binario?
--
Ciao
Alfredo

 numero decimale in binario?
No, perchè i numeri sono sempre binari. E' la rappresentazione che può
essere binaria/ottale/decimale/esadecimale, ma questo riguarda l'interfaccia
(che deve essere scritta dal programmatore).
termoPilucco.


 Forse se ci dici anche qual'è il problema che ti spinge a dover avere la
notazione binaria di un numero può essere che si trovi una soluzione
alternativa.
Ciao
--------------------------------
Inviato via 
http://usenet.libero.it

 l'interfaccia (che deve essere scritta dal programmatore).
Ci sarebbe molto da eccepire in quello che dici, ma si rischierebbe di
cadere in sterili sofismi.
Comunque sia, visto che c'č la funzione Hex$, non vedo perché non dovrebbe
esserci la Bin$ o la Oct$.
Il piů semplice codice che mi viene per la Bin č:
Public Function Bin(ByVal dec) As String
    Do
        Bin = CStr(dec Mod 2) & Bin
        dec = Int(dec / 2)
    Loop Until dec = 0
End Function
Puň essere migliorata con tutti i controlli del mondo, con opzioni di
formattazione, numero di cifre ecc., ma la conversione in se č banale.
--
Ciao, Silv:o)

Silvio Sergio ha scritto:
 > Comunque sia, visto che c'è la funzione Hex$, non vedo perché non 
dovrebbe
 > esserci la Bin$ o la Oct$.
La OCT$ esiste :)
 > Il più semplice codice che mi viene per la Bin è:
 > Public Function Bin(ByVal dec) As String
 >     Do
 >         Bin = CStr(dec Mod 2) & Bin
 >         dec = Int(dec / 2)
 >     Loop Until dec = 0
 > End Function
Sì, ad es. puoi evitare un po' di cicli macchina usando solo un
For i = 0 to NUM_BIT
	if (Dec AND (i^2)) then
		Bin = Bin & "1"
	else
		Bin = Bin & "0"
	endif
Next i
Ciao


Hai appena detto che un elevamento a potenza costa meno di una coppia
divisione/modulo.
Va bene che parliamo di potenze di due, quindi ottimizzabili dal compilatore
come shift (che per tutti i pentium tranne il P4 costano tipo un ciclo per
qualunque valore di spostamento), ma ho il sospetto che VB non se ne renda
conto :)
Ciaotutti,
*

 esserci la Bin$ o la Oct$.
eheh... o tutte, o nessuna :)
Quello che intendevo dire è che funzioni del genere devono essere viste come
funzioni di formattazione, non di conversione.
Come tali vanno usate per aquisire dati dall'utente e per mostrarli dopo le
elaborazioni. Non per fare elaborazioni.
Allo stesso non si elaborano le date in formato stringa, ma si formattano in
stringa dopo le elaborazioni del caso.
termoPilucco.

 di una coppia divisione/modulo.
Ha appena scritto che un elevamento al quadrato costa meno di una coppia
divisione/modulo, e non vedo cosa ci trovi di strano..
-- 
Ale
http://www.sen.it
http://www.sen.it/stoa

Next i
CMP ECX, NUM_BITS
JNZ For:
(Ok 2 AGI anche qui, anche se in 9 righe, quindi non influenzano la
differenza di prestazioni)
Non saprei dire quale delle due operazioni (tra quelle applicabili:
tralascio l'ottimizzatissimo shift che in VB e' inutile) sia piu' veloce, in
effetti. Una moltiplicazione e' piu' veloce di una divisione, in compenso la
IDIV restituisce gia' la coppia quoziente/resto, quindi esegue gia' un
modulo "a gratis".
Ciaotutti,
*
[1] in effetti non mi ero accorto della conversione in stringa: il codice di
zanna fa un test a priori e una concatenazione di costanti, che a
prescindere dal modo in cui la ricavi e' sempre molto piu' veloce di una
conversione in stringa.

    if (Dec AND (i^2)) then
MOV EAX, ECX  ;AGI
IMUL ECX           ;AGI


 ha scritto:
[snippone sulle possibili compilazioni in assembly]
alcune note:
- al posto di "AND (i^2)" andrebbe messo "AND (2^i)" altrimenti la funzione
non fa quello che deve fare.
Quindi non si tratta di elevamento al quadrato (che tra l'altro sarebbe
meglio scrivere come i*i) ma di elevamento alla i.
A quanto ne so l'operatore ^ in VB agisce sempre su numeri double, quindi
avverrebbero, tra l'altro, numerose (inutili) conversioni implicite.
- visto il dominio alquanto limitato [0..31] conviene precalcolare 2^i in un
array per ottenere la velocità massima.
termoPilucco