Newsgroup: it.comp.lang.visual-basic
Titolo: Esadecimale

Affronto un argomento che mi è un pò ostico e nonostante tutto,
guardando pure su google nei vecchi thread ... decisamente non riesco
a digerire.
Volevo capire cone un numero decimale si trasforma in esadecimale.
Attenzione ... è un volevo capire in termini pratici ... e non in termini di
codice.
Questo perchè altrimenti diventa il solito copia e incolla ... e poi muore
li
nella mia mente e l'ignoranza perpetua continua ad arrancare nelle pareti
del
mio cervello.
Dopo questo poema di natale dico quello che sò io ... voi se potete
completatemelo.
-----------------------------
Ho capito che ... lavorare con numeri decimali ... interi, lunghi o doppi
(traduzione)
è un cataclisma universale. Qualcuno ha pensato bene di inventare
l'esadecimale, ovvero
raggruppare i numeri in blocchi di 4 bits ciascuno.
Ho capito che si parte da 0 a 9 e da a ad f, e rispettivamente nell'ordine
hanno tutti
un bit pattern divero che parte da 0000 a 1111.
Adesso il mistero ... ho letto che per calcolare un valore devo rimandarmi a
questa tabella
di bits ... ma come?
Es. se ho il numero 72 perchè viene trasfromato in H48???
ricopio la tabella ... almeno può essere utile per chi risponde.
hex value        bit pattern        decimal equivalent
0                    0000                0
1                    0001                1
2                    0010                2
3                    0011                3
4                    0100                4
5                    0101                5
6                    0110                6
7                    0111                7
8                    1000                8
9                    1001                9
A                    1010                10
B                    1011                11
C                    1100                12
D                    1101                13
E                    1110                14
F                    1111                15
In questo discorso c'entri pienamente il discorso della rappresentazione in
bit
del numero, ma anche volendo ... il nulla mi offusca.
0    1    2    4    8    16    32    64    128
0    1    1    1    0     0      0       0       0      Questo dovebbe
essere 7
0    0    1    0    0     0      0       0       0       e questo due ...
Ma poi ... ???
Grazie Andrea

 Ma poi ... ???
Vediamo... proviamo al contrario :)
dec:72 -> bin:00010010 (64 + 8) -> hex:48 (0001 e 0010) :) funziona!
Spiego: la codifica binaria usata parte da dx, cioè
128 64 32 16 8 4 2 1
dec:72 -> bin:01001000 (64 + 8) -> hex:48 (0100 e 1000 = 4 e 8)
Ma se hai bisogno di convertire un valore decimale in hex ti basta Val("&H"
& numero)
Ciao

 Es. se ho il numero 72 perché viene trasformato in H48???
Il trucco sta nello scomporre il numero 72 in multipli di potenze di 16 (la
base in cui abbiamo scelto di convertire).
72 è uguale a (4*16^1) + (8*16^0), e quindi il valore esadecimale è H48
Ora il problema è trovare l'algoritmo che ti permetta di arrivare a questo
risultato:
l'operazione che ci serve per trovare le unità è il "modulo", che ritorna il
valore intero di una divisione.
72 MOD 16 = 8 ' qui abbiamo escluso tutti i valori sopra il 15
Int ((72-8) /(16^1)) = 4 ' qui abbiamo trovato i valori della seconda cifra
(16 ^1)
Int ((72-8-16*4) /(16^2)) = 0 ' qui abbiamo trovato i valori della terza
cifra (16 ^2)
Siccome il valore trovato è 0, possiamo fermarci. ed abbiamo il nostro
risultato è che appunto H48.
In pratica, ogni volta sottraiamo il valore precedentemente trovato, e
dividiamo per la potenza successiva della base prescelta, prendendo solo la
parte intera del risultato. Quando si ottiene 0, ci si ferma.
Tutto chiaro? Fai un po' di esperimenti e vedrai che diventerai un genio
delle conversioni. ;-)
Ciao e buone feste
*Roby*

 delle conversioni. ;-)
Potrà servirmi anche per le conversioni in euro? :)
Ciao
------------------------- SiDB Simple DataBase engine ----
------------------------- adParser Expression evaluator --
 
http://space.virgilio.it/zntf...@tin.it/
----------------------------------------------------------

codice.
Il sistema esadecimale è un sistema POSIZIONALE (come quello decimale,
del resto), soltanto che, a differenza di quello decimale, la base su
cui si lavora non è 10 ma è 16.
Come sicuramente saprai un sistema posizionale è un sistema in cui ad
ogni posizione si associa una potenza della base.
La base di un sistema non è altro il massimo numero di valori
rappresentabili.
Nel caso della base decimale è 10 ( 0,1,2,3,4,5,6,7,8,9)
Nel caso della base binaria è 2 (0,1)
Nel caso della base ottale è 8 (0,1,2,3,4,5,6,7)
Nel caso della base esadecimale è 16 (0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f)
Mi spiego meglio.
Ti faccio degli esempi in base 10 
Il numero 306 lo puoi vedere in questo modo
		Posizione     |   2   |    1    |    0   |
 		Valore          |   3   |    7    |    6   |
Perchè il 6 occupa la posizione 0 (la posizione di partenza, in questo
caso 0, è una pura convenzione)
Il numero 7 è in posizione 1
il numero 3 è in posizione 2
Il valore in base 10 delle schema sopra illustrato è allora
		(3 * 10^2) + (7 * 10^1) + (6 * 10^0) = 376
		            ^	     ^                 ^
		      posizione       posizione    posizione
Ovvero si ottiene come somma del valore della posizione, moltiplicato
la base del sistema elevata alla posizione del valore
Se i valori espressi dallo schema sono in base 8 e li voglio portare
in base dieci, basta fare:			
	           (3 * 8^2) + (7 * 8^1) + (6 * 8^0) = 254   
Se i valori espressi dallo schema sono in base 16 e li voglio portare
in base dieci, basta fare:
 
	           (3 * 16^2) + (7*16^1) + (6 * 16^0) = 886
Per quanto riguarda in particolare la base decimale ad esempio
      F = 15  (F occupa la posizione 0, per cui:   (15 * 16^0)=16)
    10 = 16  ( 1 in pos.1 e 0 in pos.0, per cui (16*16^1)+(0*16^0)=16)
    FF = 255
  100 = 256
  1AB = (1 in pos.2, A in pos.1, B in pos.0 			   	
                        (1*16^2)+(10*16^1)+(11*16^0)=427
ti ricordo che nel sistema decimale, i valori A,B,C,D,E,F
corrispondono ovviamente ai valori 10,11,12,13,14,15
Il fatto di usare la simbologia A,B,C,D,E,F credo sia semplicemente
una convenzione; infatti tu potresti avere in sistema esadecimale in
questo modo (0,1,2,3,4,5,6,7,8,9,t,y,v,b,m,q), ma sarebbe difficile
ricordare che alla lettera v è associato il valore decimale 12, in
questo caso.
 
Spero di essere stato chiaro; se hai dubbi, vedremo di chiarirli.
Ciao.

 wrote in message
news:PYEW7.34961$o9.12...@news1.tin.it...


 wrote in message
news:3c2b1675...@news.tiscalinet.it...


 wrote in message
news:3c2b1675...@news.tiscalinet.it...


 wrote in message
news:a0f8up$1sl$1...@pegasus.tiscalinet.it...


 wrote in message
news:a0faql$3eh$1...@pegasus.tiscalinet.it...


 Potrà servirmi anche per le conversioni in euro? :)
In effetti se qualche anno fa mi avessero detto che avrei dovuto imparare a
fare i calcoli in base 1936,27 gli avrei dato del matto. ;-)
Ciao
*Roby*

 ha scritto nel messaggio
news:a0f2v0$kd8rj$1...@ID-61006.news.dfncis.de...


come fa 376 ad essere in posizione 210??
Non che 376 è in posizione 210, ma che partendo da destra
6 è in posizione 0 (posizione convenzionale di partenza ... avrebbe
potuto essere anche uno, tanto per internderci...)
7 è in posizione 1
3 è in posizione 2
Tutto questo per dire che il sistema esadecimale, come il sistema
decimale, del resto, è un sistema posizione, in cui ciascuna posizione
è una potenza del 16 (nel caso dell'esadecimale)

 spiegate alle medie inferiori.
a me le hanno spiegate in Matematica delle superiori (in prima credo).
Solo che non ci ho capito una mazza :)
Poi me le sono studiate per conto mio  per usare la DATA dell'MSBasic
dell'MSX :)
E' proprio vero che una cosa la impari solo se ti interessa.
Ciao