i sistemi di numerazione, una volta compresa l'arbitrarietà del nostro (base 10), non sono complicati.
conversione base B in decimale:
espansione in potenze, cioè: siano A0 A1 A2 ... An le cifre del numero X (singolarmente trasformate in decimale perché è in questa base che abbiamo imparato a fare più facilmente i conti...), sia A0 l'unità, A1 la seconda ecc (non si può dire decina visto che la base è B...!); allora
(X base 10) = A0×B^0 + A1×B^1 + A2×B^2 + ... + An×B^n
per esempio; ABC base 16; sappiamo che A base 16 è 10 in base 16, B 11 e C 12 (basta contare parallelamente nei due sistemi fino a finire i "simboli" di quello che ne ha di più), per cui
12×1 + 11×16 + 10×16² che puoi calcolare da te. (B^0 fa sempre 1 a prescindere da B>0)
decimale in qualunque base B:
si procede per divisione successive del numero iniziale N per B finché si ottiene per quoziente 0; si collezionano i resti e tali resti presi "al contrario" (dall'ultimo al primo) sono le cifre del numero in base B, eventualmente da convertire in "simboli", per esempio se il resto è 10 useremo A (del tutto convenzionale: un qualunque insieme di simboli con un ordinamento va bene)
p.es.
140/16 = 8 con resto di 12
8/16 = 0 con resto 8
duque 140 in base 16 è 8C (C = 12)
tutte le altre conversioni si possono fare sfruttando i due algoritmi di sopra e usando dunque la base 10 come base intermedia, se necessario. tuttavia sistemi di numerazione che hanno speciali "rapporti" tra le basi hanno delle scorciatoie. la relazione è se uno è una potenza dell'altro, come nel caso base 2 e base 16 ( 16 = 2^4). allora (la dimostrazione la lascio a te) possiamo dire che a ogni cifra esadecimale corrispondono 4 cifre binarie e la conversione può essere fatta "direttamente", basta conoscere la corrispondenza tra "quadrupletti" binari e "singoletti" esadecimali.
inoltre 8 = 2^3, quindi vale lo stesso di sopra, ma dobbiamo raggruppare tre a tre e abbiamo dunque "tripletti" di cifre binarie che diventano una singola cifra esadecimale.
basta raggruppare partendo da destra le cifre binarie quattro a quattro.
p.es.
010101010001111
010 1010 1000 1111 "=" 2A8F (hex)
oppure
010 101 010 001 111 "=" 25217 (oct)
il viceversa (hex → bin e oct →bin) è ugualmente facile, basta scrivere per ogni cifra il numero in binario; p.es. F è 15 che sappiamo essere in bin 1111, 8 è in bin 1000 e così via. in questo caso, bisogna scrivere anche gli zeri "non significativi" (non significativi da soli, ma non all'interno del numero...), cioè
hex C2 = 1100 0010 cioè come vedi nn abbiamo scritto 1100 10 che sarebbe stato sbagliato.
similmente per l'ottale; in generale conviene sempre scrivere tutte e tre (ottale) o tutte e quattro (hex) le cifre; la corrispondenza è banale se sai contare in qualunque base, cosa facile:
ott hex bin
0 0 (0)000
1 1 (0)001
2 2 (0)010
3 3 (0)011
4 4 (0)100
5 5 (0)101
6 6 (0)110
7 7 (0)111 nota: qui finiscono i "simboli" dell'ott.
10 8 (1)000
11 9 (1)001
12 A (1)010
13 B (1)011
14 C (1)100
15 D (1)101
16 E (1)110
17 F (1)111 qui quelli dell'hex e guarda caso il prossimo numero è
20 10 10000
le regole dell'addizione sono sempre le stesse:
0+0=0
1+0=0+1=1
1+1= 0 con riporto (che "riporti" nella colonna successiva); è molto più elementare sommare in binari che in decimale! mettili in colonna come fai coi numeri decimali...
per la sottrazione A-B, se il numero A
0-0 = 0
1-0 = 1
1-1 = 0 *
0-1 = 1 con prestito (e dunque scali la cifra successiva, con le stesse regole; avendo fatto in modo che, in A-B, A sia sempre >B, il prestito sarà "naturalmente" preso proprio dall'ultima cifra di A verificandosi il caso * dove però l'uno è dato dalla sottrazione per il prestito, non dalla cifra di B che dovrà essere 0, altrimenti vorrebbe dire che B>=A)