Bases Numéricas

No nosso habitual dia a dia trabalhamos com números. Todos estamos habituados a ver números compostos pelos dígitos 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9. Porém, há sistemas, nomeadamente os sistemas informáticos, que usam outros tipos de numeração.

Para já, é bom acostumarmo-nos já à ideia que a nossa numeração quotidiana tem um nome e chama-se decimal (de 10 dígitos, de 0 a 9). E ainda que temos “pesos” para cada “casa”: Unidades, dezenas, centenas, milhares, etc…

Ainda, não existe apenas o sistema de numeração decimal, existe outros sistemas de numeração, ou bases numéricas!

Base 10 – Decimal

Pode parecer um pouco ridículo o seguinte cálculo, mas será bastante útil para outros sistemas de numeração. Imagine-se o número:

15943

É um exercício da primária, mas recordemos que temos 3 unidades (peso de 1), 4 dezenas (peso de 10), 9 centenas (peso de 100), 5 milhares (peso de 1000) e 1 dezena de milhar (peso de 10000). Repare que, da direita para a esquerda – das dezenas para os milhares – o peso vai aumentando numa relação exponencial de base 10. De facto, temos:

PotênciaDescrição
100 = 1casa das unidades (menor peso)
101 = 10casa das dezenas
102 = 100casa das centenas
103 = 1000casa dos milhares
104 = 10000casa das dezenas de milhares (maior peso)

Com apoio na seguinte tabela, poderíamos olhar para o nosso número da seguinte forma:

Dez. MilharesMilharesCentenasDezenasUnidades
104 = 10000103 = 1000102 = 100101 = 10100 = 1
15943

Bases numéricas

Pode também parecer ridículo as seguintes divisões sucessivas por 10, mas repare-se que:

Bases numéricas

Pegando no último resultado e juntando os restos das divisões inteiras de baixo para cima, obtém-se o nosso número: 15943.

Base 2 – Binário

Vejamos agora o caso dos computadores. O processador (CPU) e demais dispositivos lógicos que fazem parte de um computador, funcionam com 2 níveis de tensão eléctrica para designar um estado OFF, Falso ou 0 e um estado ON, Verdade ou 1. Estamos, portanto, perante uma representação binária pois só temos 2 estados possíveis.

Consequentemente, todo o sistema numérico de um computador está limitado a estes 2 estados ON / OFF, Verdade / Falso, 1 / 0. Ficamos então reduzidos a dois dígitos: O 0 e o 1. Dizemos por isso que estamos perante um sistema de numeração binário ou de base 2!

Agora a questão que nos surge é: Como poderei representar um número binário no meu sistema numérico decimal e vice-versa?

Tomemos por exemplo o seguinte número binário:

110101

À semelhança da nossa numeração decimal, os dígitos binários (também conhecidos por BIT – BInary digiT) têm um peso menor no bit mais à direita e um peso maior no bit mais à esquerda. A principal diferença é que o peso de cada bit aumenta numa relação exponencial de base 2.

Repare que na nossa numeração decimal temos 10 dígitos, por isso o peso é representado por potências de base 10. Agora, nos números binários temos 2 dígitos e por isso o peso ser representado por potências de base 2.

Se construirmos uma tabela semelhante à que fizemos no exemplo básico do número decimal, mas usando agora potências de base 2, temos:

MSB    LSB
25 = 3224 = 1623 = 822 = 421 = 220 = 1
110101

Ou seja, efectuando agora os cálculos:

Bases numéricas

Concluímos, então, que o nosso número binário (em base 2) 110101 é igual a 53 no nosso sistema decimal (base 10).

Já agora, dizemos que o bit mais à direita é o bit menos significativo (de menor peso) – LSB (Less Significant Bit) – e o bit mais à esquerda é o bit mais significativo (de maior peso) – MSB (Most Significant Bit) – tal como está indicado na tabela acima.

Quando trabalhamos com diferentes bases numéricas deveremos sempre indicar a base da seguinte forma:

110101 (2) = 53 (10)

No caso da numeração decimal, a divisão sucessiva por 10 parecia ridícula. De facto, estaríamos a proceder como se estivéssemos a converter um número da base 10 para a base 10…

Hum… alguém falou em converter da base 10 para uma base N? Pois é, se no exemplo “ridículo” temos divisões por 10, nos restantes casos de interesse temos divisões sucessivas por N!

Então, se pretendermos saber qual a representação em binário do número decimal 53, bastará fazer as seguintes divisões sucessivas por 2.

Bases numéricas

De forma análoga, pegamos no último resultado e juntamos os restos da divisão inteira de baixo para cima.

Assim, temos novamente o número binário: 1 1 0 1 0 1

Trabalhar directamente com binários não é fácil, sobretudo quando recuamos no tempo para os tempos da informática “pré-histórica”. Nesse tempo, quase toda a programação era feita a nível da máquina e a necessidade de representar grupos de bits com alguma numeração mais “humana” fez surgir outras bases numéricas: A octal e a hexadecimal.



Base 8 – Octal

Falemos agora do sistema de numeração octal. Como o nome sugere, é um sistema composto por 8 dígitos de 0 a 7. De forma análoga ao que já foi explicado, podemos concluir que o peso destes números estará relacionado com potências de base 8.

Consideremos, então, o seguinte número octal:

65

Voltemos a criar uma tabela, desta vez com potências de base 8:

81 = 880 = 1
65

Facilmente calculamos:

Bases numéricas

Ou seja, temos que:

65(8) = 53(10)

Já para calcular de decimal para octal, voltamos a usar as divisões sucessivas, neste caso por 8.

Não vou representar o cálculo como fiz atrás pois facilmente deduzimos que 53 ÷ 8 dá 6 e resto 5. Logo, temos 65 em octal.

Se observarmos que 3 bits têm 8 combinações possíveis, 23 = 8, facilmente podemos concluir que cada número octal, também conhecido por octeto, pode representar grupos de 3 bits. Neste caso, a conversão entre octal e binário é extremamente simples.

Observemos novamente o número octal 65 e converta-se cada um dos seus dígitos para binário, usando divisões sucessivas por 2:

Bases numéricas

Como cada octeto tem um peso de potências de base 8, assim como cada grupo de 3 bits, podemos agrupar os resultados em binário da forma:

1 1 0 (para 6) e 1 0 1 (para 5), ou seja, temos o número binário, já conhecido, 1 1 0 1 0 1

Isto é:

65(8) = 110101(2) = 53(10)

Já o contrário é igualmente fácil se seguirmos o mesmo princípio e termos grupos de 3 bits:

 

22 = 421 = 220 = 122 = 421 = 220 = 1
110101

Teremos então, para cada grupo, os seguintes cálculos:

Bases numéricas

Ou seja:

110101(2) = 65(8) = 53(10)

Base 16 – Hexadecimal

Porém, o sistema octal já caiu em desuso faz vários anos. Hoje em dia, quando trabalhamos com binários, trabalhamos com múltiplos de 8 bits (em cada cada grupo de 8 bits representa o que chamamos de byte). Se dividirmos cada grupo de 8 bits em grupos de 4 bits teremos 16 combinações possíveis – 24 = 16 – e assim surge o sistema de numeração hexadecimal, ou de base 16.

No sistema hexadecimal, temos 16 dígitos compostos pelos números de 0 a 9 e as letras de A a F. A tabela seguinte mostra a relação entre a numeração decimal de 0 a 15 e a numeração hexadecimal de 0 a F, tendo também, na primeira coluna, a representação em binário:

Binário (base 2)Decimal (base 10)Hexadecimal (base 16)
000000
000111
001022
001133
010044
010155
011066
011177
100088
100199
101010A
101111B
110012C
110113D
111014E
111115F

Desta tabela podemos observar várias coisas interessantes:

  • Para os valores hexadecimais, as letras representam: A = 10; B = 11; C = 12; D = 13 ; E = 14 e F = 15.
  • Num número binário é muito fácil identificar quando este representa um número decimal par ou ímpar. Repare-se que todos os números pares terminam com o LSB a 0 e todos os números ímpares com o LSB a 1. (LSB = Less Significant Bit – bit de menor peso, que está mais à direita, como já foi referido atrás)
  • Observando atentamente as colunas dos números binários, vamos vendo quando estas vão – da direita para a esquerda – tomando o valor 1. Concluímos, com base no campo das probabilidades, que: Com 1 bit apenas temos 2 combinações (21 = 2) – 0 ou 1; Com 2 bits temos 4 combinações (22 = 4) – 00, 01, 10 e 11; Com 3 bits temos 8 combinações (23 = 8) – veja a primeira metade da tabela; Com 4 bits temos 16 combinações (24 = 16) – toda a tabela! Observe novamente a tabela tomando especial atenção à ordenação dos binários.

Voltemos agora à questão das conversões para decimal e consideremos agora um número maior.

Seja, então, considerado o seguinte número hexadecimal:

8A1D

Lembre-se que:

  • A tem o valor de 10
  • D tem o valor de 13
  • Nota: Este número hexadecimal também pode ser representado por 841Dh ou 0x841D

Façamos a famosa tabela, agora com potências de base 16:

163 = 4096162 = 256161 = 16160 = 1
8A1D

Teremos, então, os seguintes cálculos:

Bases numéricas

Isto é:

8A1D(16) = 35357(10) (ou 8A1Dh = 35357)

Façamos, agora, a conversão de decimal para hexadecimal, usando divisões sucessivas por 16:

Bases numéricas

Temos então o último resultado 8 e os restos, de baixo para cima, 10, 1 e 13. Isto é:

35357(10) = 8A1D(16) (ou 35357 = 8A1Dh)

Por fim, repare-se o quão fácil é passar de hexadecimal para binário e vice-versa!

8A1D
1000101000011101

Desta vez não foram feitos os cálculos, mas a esta altura, e com o auxílio da tabela com a representação destes valores, o leitor deverá chegar facilmente a estes resultados.

Já agora, façamos só uma última conversão deste binário para octal:

(00) 10 0 01 0 10 0 00 1 11 0 1
105035

Temos, então, os seguintes valores para as diferentes bases:

1000 1010 0001 1101 (2) = 105035 (8) = 35357 (10) = 8A1D (16)



NOTA HISTÓRICA: A base 8 (octal)

Os leitores podem-se questionar o porquê de uma base octal. Vimos que um número octal pode ser convertido em binário em grupos de 3 bits, pois 23 = 8. Um conjunto de 6 bits será facilmente representado por 2 algarismos em base 8 e vice-versa.

A resposta a esta questão está no que era um byte na aurora da informática. Enquanto hoje, um byte é representado por 8 bits (e daí ser habitual usar o sistema hexadecimal em que cada algarismo representa um grupo de 4 bits), nos primórdios dos tempos um byte era representado por 6 bits.

Próximo artigo 

Este artigo foi escrito com a antiga grafia.

About Carlos Santos

Frequência em mestrado de Engenharia Electrotécnica e de Computadores. Programador freelancer: Websites, Aplicações Web (JAVA e PHP), J2SE/J2EE, C/C++ e Android. Explicador e formador em informática, matemática e electrotecnia. Formação presencial ou remota através de Skype e Team Viewer. Interesses: Música, áudio, vídeo, ciência, astronomia e mitologia.

Leave a Reply

Your email address will not be published and it is optional.