Vamos considerar um número genérico, como 3785, que lemos como três mil, setecentos e oitenta e cinco, esse sistema numérico é o decimal, que os humanos aprendem desde criança, até pelo fato do ser humano ter dez dedos, o que facilitou a aprendizagem da contagem desde o começo da humanidade.
No número 3785, vamos considerar que temos quatro números, o 3 vale três mil, o 7 vale setecentos, o 8 vale oitenta e o 5 é o único que realmente vale 5, dessa forma, podemos escrever o mesmo número assim:
3785:
3 × 1000
7 × 100
8 × 10
5 × 1
A base decimal, obviamente, é representada pela base 10, e por isso podemos potências para definir um número, assim:
3785:
3 × 103
7 × 102
8 × 101
5 × 100
PS: Lembrando que por regra, qualquer número elevado à zero retorna 1.
Ou seja, a soma do 3785 seria o mesmo que:
3785:
3000
700
80
5
No caso, o decimal é algo que nós identificamos naturalmente, mas o computador não trabalha só com esse sistema, por isso é importante identificar a base numérica.
Lembrando a matemática básica, os números são trabalharamos com unidades, dezenas, centena, milhar, etc., isso é chamado de notação posicional, onde cada algarismo tem sua posição específica e um valor diferente dentro de um número (tipo o 3 em 3785 que representa 3000).
PS: Esse negócio de unidade, dezena, centena, etc., só funciona em decimal.
Pegando outro exemplo em decimal, 2004, separando o milhar, centena, dezena e unidade, dessa forma:
2004:
2 = 2 × 103 = 2 × 1000
0 = 0 × 102 = 0 × 100
0 = 0 × 101 = 0 × 10
4 = 4 × 100 = 4 × 1
Lembrando que as potências começam a ser contado do zero, pela unidade,
Veja outro exemplo com 123:
123:
1 = 1 × 102 = 1 × 100
2 = 2 × 101 = 2 × 10
3 = 3 × 100 = 3 × 1
Assim como sabemos, temos acima da casa de milhar, a dezena de milhar, centena de milhar, milhão, dezena de milhão, centena de milhão, bilhão, etc., quanto maior o número, mais casas decimais, obviamente.
Vamos pegar um exemplo mais longo, por exemplo 134690:
134690:
1 = 1 × 105 = 1 × 100000
3 = 3 × 104 = 3 × 10000
4 = 4 × 103 = 4 × 1000
6 = 6 × 102 = 6 × 100
9 = 9 × 101 = 9 × 10
0 = 0 × 100 = 0 × 1
A potência começa do primeiro algarismo (unidade) com a potência 100, depois a dezena com 101, 102 e assim por diante, até infinitas combinações.
Os números em decimal nós reconhecemos naturalmente (como o 3785), mas podemos reconhecê-lo também como (3785)10.
Mas até aí, não vimos muita coisa de novo, já que o sistema decimal é o que os humanos entendem, já as máquinas (computador, televisão, celular, etc.) entendem o sistema binário.
Basicamente, os sistemas agem assim:
No caso, nós teremos que criar uma relação entre os dois sistemas numéricos, para que humanos e máquinas possam interagir entre si.
Vamos contar alguns números em decimal assim:
0 1 2 3 4 5 6 7 8 9
No caso acima, acabou as opções a serem usadas pela unidade, aí colocaremos o 1 na dezena e reiniciar na unidade assim:
10 11 12 13 14 15 16 17 18 19
E assim sucessivamente até chegar em 99, daí colocaremos 1 na centena e reiniciamos a dezena e unidade (100) até chegar as combinações possível (199), aí vamos pra 200 até 299 e sucessivamente até 999, e fazemos da mesma forma com 1000 até um número infinito.
Em outras palavras, quando acaba a combinação entre os números de todas as casas, uma a esquerda é adicionada.
Isso daí, pra qualquer um é bem óbvio, mas essa forma também é usada para outros sistemas, vamos contar em binário, que só tem dois dígitos:
No caso, o binário, obviamente, usa a base 2, ficando assim:
0 1
Só nisso acima acabou as possiblidades da primeira casa, tendo que prosseguir colocando 1 na segunda casa:
10 11
PS: No binário e em outras bases não existe nomenclaturas como unidade, dezena e etc., são identificados apenas como primeira casa, segunda casa e etc. (contando da direita pra esquerda), por isso também não leia 10 como "dez" ou 11 como "onze", em binário se lê "um-zero" e "um-um", respectivamente, isso vale pra qualquer número em binário.
Da mesma forma, a medida que for acabando as combinações, colocamos mais uma casa a esquerda, veja abaixo prosseguindo esse raciocínio:
100 101 110 111
E prosseguindo:
1000 1001 1010 1011 1100 1101 1110 1111
Da mesma forma:
10000 10001 10010 10011 10100 10101 10110 10111 11000 11001 11010 11011 11100 11101 11110 11111
E assim sucessivamente.
Da mesma forma que fizemos com os decimais, podemos usar a base 2 para converter binários em decimais, assim:
1011:
1 = 1 × 23 = 1 × 8 = 8
0 = 0 × 22 = 0 × 4 = 0
1 = 1 × 21 = 1 × 2 = 2
1 = 1 × 20 = 1 × 1 = 1
8 + 0 + 2 + 1 = 11
Dessa forma é fácil converter binário em decimal, sempre lembrando do resultado das potências pra cada casa, a posição onde encontra o 1 é somada, a posição onde encontra 0 é ignorada, e a soma de todos retorna o decimal.
Da mesma forma:
1001:
1 = 1 × 23 = 1 × 8 = 8
0 = 0 × 22 = 0 × 4 = 0
0 = 0 × 21 = 0 × 2 = 0
1 = 1 × 20 = 1 × 1 = 1
8 + 0 + 0 + 1 = 9
PS: Os números na base 2 são representados, por exemplo, como (1001)2.
Como sabemos, os aparelhos eletrônicos usam sistema binário, já que eles trabalham com pulsos elétricos, que justamente é representado por binário (que trabalha por padrões como ligado/desligado), e eles são convertidos para que a gente possa entender.
Ramos como Hardware e Redes necessita muito de uso de sistemas numéricos diferente, como o binário e o hexadecimal.
Como visto, existe uma ligação entre os sistemas numéricos decimal e binário, até porque a matemática é uma ciência exata.
Veja um exemplo de conversão de binário para decimal:
1101:
1 = 1 × 23 = 1 × 8 = 8
1 = 1 × 22 = 1 × 4 = 4
0 = 0 × 21 = 0 × 2 = 0
1 = 1 × 20 = 1 × 1 = 1
8 + 4 + 0 + 1 = 13
Isso já vimos anteriormente, é só pra relembrar.
Mas temos um macete bem simples para converter binário em decimal facilmente, é só lembrar dos resultados das potências na ordem das casas numéricas, 1, 2, 4, 8, 16, 32, etc., por exemplo:
16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|
1 | 0 | 0 | 1 | 1 |
No caso acima, podemos simplesmente ignorar os resultados de potências que tem 0 e somar os que tem apenas 1, dessa forma, pro mesmo número acima:
16 + 0 + 0 + 2 + 1 = 19
Dessa forma, o número 10011 (não leia dez mil e onze, é um zero zero um um) convertido para decimal é igual a 19.
Já o contrário, ou seja, converter em decimal pra binário (por exemplo, o 13 na base 10), é fazendo divisão inteira, dessa forma:
Primeira casa:
13 | 2
1 6
Segunda casa:
6 | 2
0 3
Terceira casa:
3 | 2
1 1
Quarta casa:
1 | 2
1 0
Ou seja, vamos dividindo até não dar mais (ou seja, o resultado ser zero), no caso da divisão inteira, 1 dividido por 2 o resultado é zero e sobra 1 (até porque nesse caso não dá pra dividir um por 2), e 0 dividido por 2 é 0 e sobra 0. Essa regra existe sempre quando o numerador é menor que o denominador.
Aí, pegamos o número de baixo pra cima, o primeiro resto (mais abaixo) é o primeiro dígito (à esquerda), e o último resto (na casa mais acima), é o último dígito (à direita). No caso, o 13 em binário é 1101.
Temos também um macete para converter um número decimal em binário, usando cada casa com a potência numérica em cima também:
8 | 4 | 2 | 1 |
---|
No caso, basta somar os resultados das potências acima até ver se elas retornam o número, no caso, 8 + 4 + 1.
Aí basta colocar o 1 onde tem os números somadas, e 0 onde não tem, assim:
8 | 4 | 2 | 1 |
---|---|---|---|
1 | 1 | 0 | 1 |
Veja outro exemplo com 40 na base 10:
32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|
1 | 0 | 1 | 0 | 0 | 0 |
No caso, a soma de 32 + 8 retornou 40, que no binário é 101000.
Para provar, fazemos a reconversão de binário pra decimal:
101000:
1 = 1 × 25 = 1 × 32 = 32
0 = 0 × 24 = 0 × 16 = 0
1 = 1 × 23 = 1 × 8 = 8
0 = 0 × 22 = 0 × 4 = 0
0 = 0 × 21 = 0 × 2 = 0
0 = 0 × 20 = 0 × 1 = 0
32 + 0 + 8 + 0 + 0 + 0 = 40
Como visto até agora, dois sistemas numéricos usados são o decimal, usado pelos humanos, e o binário, usado pelas máquinas, mas ainda tem outros sistemas utilizados na área de TI, no caso, veremos o sistema octal e hexadecimal.
Números de IPv6 e MAC, ou hashs, são usados em hexadecimal, por exemplo. Códigos de erros em jogos ou de memória, ou permissões em Linux, são usados em octal.
Basicamente, o sistema octal é de 0 a 7 (eliminando o oito, assim como o binário elimina o dois e o decimal só vai até nove). O sistema hexadecimal vai de 0 a 9 e depois tem seis letras de A a F (que não são lidos como letras do alfabeto). Veja abaixo os algarismos dessas bases:
PS: Nos números octais e hexadecimais, assim como os binários, as casas também não são contadas por unidades, dezenas e etc, e não se lê coisas como "dez mil, cento e onze".
Vamos relembrar o número 2004 em decimal:
2004:
2 = 2 × 103 = 2 × 1000
0 = 0 × 102 = 0 × 100
0 = 0 × 101 = 0 × 10
4 = 4 × 100 = 4 × 1
Isso acima é nada mais do que a notação posicional.
Da mesma forma, a notação é usada para qualquer base, lembrando do binário:
1101:
1 = 1 × 23 = 1 × 8 = 8
1 = 1 × 22 = 1 × 4 = 4
0 = 0 × 21 = 0 × 2 = 0
1 = 1 × 20 = 1 × 1 = 1
8 + 4 + 0 + 1 = 13
Vamos ver por exemplo, a notação posicional em octal (base 8), no caso, o 371:
371:
3 = 3 × 82 = 3 × 64 = 192
7 = 7 × 81 = 7 × 8 = 56
1 = 1 × 80 = 1 × 1 = 1
192 + 56 + 1 = 249
No caso acima, 371 na base 8 (leia três sete um em octal) é o mesmo que 249 em decimal (esse pode ser lido duzentos e quarenta e nove). A base 8 pode ser lida como, por exemplo, (371)8.
Agora, no sistema hexadecimal (base 16), é bom lembrar primeiramente que os caracteres A, B, C, D, E e F são o mesmo que 10, 11, 12,13, 14 e 15 em decimal.
Decimal | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Hexadecimal | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
Vamos ver um exemplo de um número em hexadecimal, por exemplo, o 1FA:
1FA:
A = 10
F = 15
1 = 1 × 162 = 1 × 256 = 256
F = 15 × 161 = 15 × 16 = 240
A = 10 × 160 = 10 × 1 = 10
256 + 240 + 10 = 506
No caso acima, 1FA na base 16 (leia um efe a) é o mesmo que 506 em decimal (esse pode ser lido quinhentos e seis). Os números em hexadecimal podem ser lido, como por exemplo, (1FA)16.
Veja outro exemplo, com 1257 na base 8:
1257:
1 = 1 × 83 = 1 × 512 = 512
2 = 2 × 82 = 2 × 64 = 128
5 = 5 × 81 = 5 × 8 = 40
7 = 7 × 80 = 7 × 1 = 7
512 + 128 + 40 + 7 = 687
No caso acima, o 1257 em octal é o mesmo que 687 em decimal.
Veja também outro exemplo, com 13C2 na base 16:
13C2:
C = 12
1 = 1 × 163 = 1 × 4096 = 4096
3 = 3 × 162 = 3 × 256 = 768
C = 12 × 161 = 12 × 16 = 192
2 = 2 × 160 = 2 × 1 = 2
4096 + 768 + 192 + 2 = 5058
No caso acima, o 13C2 em hexadecimal é o mesmo que 5058 em decimal.
Dessa mesma forma, é possível fazer conversões de números de qualquer base, inclusive de bases não citadas como base 7 ou base 3.
Como visto anteriormente, podíamos converter decimal em binário fazendo divisões inteiras, dessa forma:
Primeira casa:
13 | 2
1 6
Segunda casa:
6 | 2
0 3
Terceira casa:
3 | 2
1 1
Quarta casa:
1 | 2
1 0
Da mesma forma, podemos converter decimal em octal, como podemos ver com o número 177 em decimal:
Primeira casa:
177| 8
1 22
Segunda casa:
22 | 8
6 2
Terceira casa:
2 | 8
2 0
Da mesma forma, vamos dividindo até não dar mais (ou seja, o resultado ser zero), no caso da divisão inteira, quando o numerador é menor que o denominador, o resultado é zero e o resto é igual ao numerador.
Aí, da mesma forma, pegamos o número de baixo pra cima, o primeiro resto (abaixo) é a primeira casa (à esquerda), e o último resto (na casa mais acima), é o último dígito (à direita). No caso, o 177 em octal é 261.
Para vermos que está certo, vamos reconverter o octal em decimal:
261:
2 = 2 × 82 = 2 × 64 = 128
6 = 6 × 81 = 6 × 8 = 48
1 = 1 × 80 = 1 × 1 = 1
128 + 48 + 1 = 177
A forma para converter decimal em hexadecimal é a mesma, como podemos ver com o número 685 em decimal:
Primeira casa:
685| 16
13 42
13 = D
Segunda casa:
42 | 16
10 2
10 = A
Terceira casa:
2 | 16
2 0
Aí, da mesma forma, pegamos o número de baixo pra cima, o primeiro resto (abaixo) é a primeira casa (à esquerda), e o último resto (na casa mais acima), é o último dígito (à direita), e tudo que retornar de 10 e 15 trocamos por A a F. No caso, o 685 em hexadecimal é 2AD.
Para vermos que está certo, vamos reconverter o hexadecimal em decimal:
2AD:
A = 10
D = 13
2 = 2 × 162 = 2 × 256 = 512
A = 10 × 161 = 10 × 16 = 160
D = 13 × 160 = 13 × 1 = 13
512 + 160 + 13 = 685
Podemos também converter outras bases, por exemplo, para hexadecimal em binário, vamos converter o 1E na base 16.
Primeiro, convertermos o 1E para decimal, assim:
1E:
E = 14
1 = 1 × 161 = 1 × 16 = 16
E = 14 × 160 = 14 × 1 = 14
16 + 14 = 30
E depois, convertemos o resultado decimal para binário:
Primeira casa:
30 | 2
0 15
Segunda casa:
15 | 2
1 7
Terceira casa:
7 | 2
1 3
Quarta casa:
3 | 2
1 1
Quinta casa:
1 | 2
1 0
Daí é só organizar, e veremos que 1E na base 16 é igual a 11110 na base 2. Dessa forma podemos ver que existe relação entre os sistemas numéricos.
No caso, o sistema decimal serviu de ponte para conversões, isso pode ser usado para qualquer conversão, como de octal para hexadecimal, por exemplo.