El sistema numèric que utilitzem tots en el nostre dia a dia és el sistema de numeració decimal. Això significa que utilitzem 10 dígits o símbols per representar els diferents números. A continuació es mostren els conceptes necessaris per poder comprendre més en profunditat el seu funcionament.
Per tal d'aprendre a convertir entre bases, utilitzarem les més típiques: decimal, binari i hexadecimal.
Per poder convertir un nombre en base 10 (decimal) a base 2 (binari), haurem de realitzar moltes divisions consecutives per 2, deixant constància de quins han sigut els resultats i les restes anteriors. A continuació es mostra el procediment detallat:

Ara convertirem el número 28 de base 10 a base 2:
El resultat final obtingut és 11100.
Per poder convertir un nombre en base 2 (binari) a base 10 (decimal), haurem d'utilitzar les potències de 2.
En primer lloc, haurem d'escriure tantes potències de 2 com xifres tingui el nostre número binari, seguint el següent format:
... 210 29 28 27 26 25 24 23 22 21 20
↓ O el que és el mateix... ↓
... 1024 512 256 128 64 32 16 8 4 2 1
Llavors haurem de sumar tots aquells números en la posició dels qual tinguem un 1 en el nostre número binari. Per exemple si tinguéssim el número binari 1101101:
Potències de 2: 64 32 16 8 4 2 1
Número binari: 1 1 0 1 1 0 1
64 + 32 + 8 + 4 + 1 = 109 (1101101 en decimal)
En aquest cas, aprofitarem una propietat curiosa que poseeixen aquestes bases. Primer de tot, haurem d'escriure una taula amb les equivalències binari-hexadecimal entre els nombres 0 i 15 (els possibles valors hexadecimals). Aquesta taula quedaria així:
| 0 | 0000 |
|---|---|
| 1 | 0001 |
| 2 | 0010 |
| 3 | 0011 |
| 4 | 0100 |
| 5 | 0101 |
| 6 | 0110 |
| 7 | 0111 |
| 8 | 1000 |
|---|---|
| 9 | 1001 |
| A | 1010 |
| B | 1011 |
| C | 1100 |
| D | 1101 |
| E | 1110 |
| F | 1111 |
A partir d'aquesta taula, podrem realitzar conversions de manera senzilla, ja que cada caràcter en hexadecimal es pot convertir únicament substituint-lo pel seu equivalent en binari.
Al mateix temps, si convertim de binari a hexadecimal, únicament haurem d'agrupar de 4 en 4 les xifres (començant per la dreta) i realitzar el mateix procediment a la inversa. En cas que el nombre de xifres del nostre número binari no sigui múltiple de 4, haurem d'omplir-lo amb 0s per l'esquerra.
A continuació es mostren uns exemples:
Posem per cas que volem convertir el nombre 100111011 (binari a hexadecimal):
1 - 0011 - 10110001 - 0011 - 10111 - 3 - BPosem per cas que volem convertir el nombre 3F1 (hexadecimal a binari):
0011 - 1111 - 0001A continuació es mostra com realitzar conversions de bases utilitzant diferents llenguatges de programació.
#include<iostream>
using namespace std;
int main()
{
int decimal = 123;
int binari[32];
int i = 0;
while (n > 0) {
// guardem la resta de la divisió en un array (0 o 1)
binari[i] = n % 2;
n = n / 2;
i++;
}
// imprimim els valors per pantalla invertint l'ordre
for (int j = i - 1; j >= 0; j--)
cout << binari[j];
return 0;
}
#include <iostream>
#include <string>
using namespace std;
int main()
{
string binari = "10101001";
int decimal = 0;
// Inicialitzem la base a 1, es a dir 2^0
int base = 1;
int len = num.length();
for (int i = len - 1; i >= 0; i--) {
if (num[i] == '1')
decimal += base;
base = base * 2;
}
cout << decimal << endl;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
char binari[] = "1001";
cout << stoi(binari, 0, 2);
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int val;
cin >> val;
cout << hex << val << endl;
return 0;
}
def decimalABinari(N):
binari = 0
exp = 0
while (N != 0):
res = N % 2
c = pow(10, exp)
binari += res * c
N //= 2
# Comptador usat per guardar l'exponent
exp += 1
return binari
# Codi principal
N = 17
print(decimalABinari(N))
def binariADecimal(n):
num = n;
decimal = 0;
# Inicialitzem la base a 1, es a dir 2^0
base = 1;
temp = num;
while(temp):
ultim_digit = temp % 10;
temp = int(temp / 10);
decimal += ultim_digit * base;
base = base * 2;
return decimal;
# Codi principal
num = 10101001;
print(binariADecimal(num));
n = input()
# Converteix n a base 2
s = int(n, 2)
print(s)
def ChangeHex(n):
if (n < 0):
print(0)
elif (n <= 1):
print n,
else:
ChangeHex( n / 16 )
x = (n%16)
if (x < 10):
print(x),
if (x == 10):
print("A"),
if (x == 11):
print("B"),
if (x == 12):
print("C"),
if (x == 13):
print("D"),
if (x == 14):
print("E"),
if (x == 15):
print ("F"),
decimal = 30
hexadecimal = hex(decimal).split('x')[-1]
print(hexadecimal)
<script>
function decToBinary(n)
{
// array per emmagatzemar el nombre binari
let binaryNum = new Array(32);
// comptador per l'array binari
let i = 0;
while (n > 0) {
// emmagatzema la resta a l'array binari
binaryNum[i] = n % 2;
n = Math.floor(n / 2);
i++;
}
// imprimeix per pantalla l'array binari en ordre invers
for (let j = i - 1; j >= 0; j--)
document.write(binaryNum[j]);
}
// Codi principal
let n = 17;
decToBinary(n);
</script>
<script>
function binaryToDecimal(n)
{
let num = n;
let dec_value = 0;
// Inicialitzem la base a 1, es a dir 2^0
let base = 1;
let len = num.length;
for (let i = len - 1; i >= 0; i--) {
if (num[i] == '1')
dec_value += base;
base = base * 2;
}
return dec_value;
}
// Codi principal
let num = "10101001";
document.write(binaryToDecimal(num) + "<br>");
</script>
<script>
var binaryNumber = "1001";
document.write(parseInt(binaryNumber, 2));
</script>
hexString = yourNumber.toString(16);