terça-feira, 7 de fevereiro de 2023

Aprendendo sobre Hexadecimal

Se você realmente quer entender o funcionamento interno do PC ou qualquer outro computador, precisará ter um bom conhecimento do sistema numérico orientado para o computador conhecido como hexadecimal, ou hexa, para abreviar. Entender hexa certamente não é necessário para dominar o PC, mas, se você quiser compreender a máquina e ser capaz de usar algumas das ferramentas mais sofisticadas para o PC, então terá que ter um conhecimento básico de hexa, que veremos neste artigo.

Janela de um editor hexadecimal — Notepad ++
Janela de um editor hexadecimal — Notepad ++

Hexa, de forma simples, é uma solução prática para um problema de tédio: expressar os dados exatos codificados dentro dos nossos computadores.

Como já vimos em outro artigo (Bits e Bytes), os menores blocos de montagem dos dados do computador são bits que representam individualmente os valores 0 e 1. Se escrevemos dados de computador em sua forma binária, ou de bit, obtemos uma cadeia um tanto longa de zeros e uns. Até mesmo escrever um único byte em forma binária é um tanto extenso; por exemplo, 01010101. Como cada byte, ou caractere, contém oito bits, são necessários 88 bits para representarmos a palavra "hexadecimal"; um disco rígido, normalmente, tem muitos bilhões de bits gravados sobre ele. Quando queremos escrever os dados exatos em nossos computadores, precisamos de uma forma que não seja tão longa e tediosa quanto o uso do binário, e aí aparece a utilidade do hexadecimal.

Hexa é simplesmente uma abreviação para a notação binária, onde um dígito hexadecimal representa quatro dígitos binários (bits). Se olharmos para para os bits individualmente, eles possuem dois valores, 0 e 1. Se os agrupássemos em pares, eles seriam quatro combinações diferentes de valores de bits no par: 00 para começar, 01, 10 e finalmente 11. Tomando a ideia dois passos adiante, se reunirmos os bits em grupos de quatro, descobriríamos que existem 16 padrões possíveis de quatro bits: começando com 0000 e terminando com 1111. (Matematicamente, o número de combinações distintas dos dois valores de bit tomados com quatro de cada vez é 2 à quarta potência, ou 16.)

No sistema de numeração decimal, que são usados diariamente, temos dez símbolos diferentes, de 0 a 9, para representar 10 valores de dígito. Então combinamos esses dígitos decimais para criar números maiores, como 100. O mesmo princípio aplica-se à notação binária, onde podemos usar os dois símbolos de bit, 0 e 1, e combiná-los para criar números maiores. Esta mesma ideia aplica-se ao hexa, mas, ao invés de dois dígitos binários ou 10 dígitos decimais, o hexa usa 16 dígitos hexadecimais distintos para representar 16 valores distintos. Os 16 dígitos hexa são 0-9 (que têm o mesmo significado numérico dos nossos dígitos decimais de 0 a 9) e depois vêm mais seis dígitos hexa, para indicar os seis valores hexa adicionais. Eles são escritos usando-se as letras A, B, C, D, E e F. Estes seis últimos dígitos hexa, de A a F, representam os seis valores após o nove: A é 10, B é 11, e assim por diante até F, que tem o valor de 15.

Cada um dos 16 dígitos hexa, 0-9 e A-F, representa um valor de 0-15, e também representa um padrão de quatro bits. Por exemplo, o dígito hexa A representa o padrão de bit 1010, F representa os bits 1111. A Tabela 1 mostra uma lista de 16 dígitos hexa, seus equivalentes decimais, e os valores numéricos, ou padrões de 4 bits, que eles representam.

Os 16 dígitos hexa.
Tabela 1 — Os 16 dígitos hexa.

Há duas formas de ver estes dígitos hexa ( e os quatro bits que cada um deles representa), e é importante entender a distinção. Ela é uma distinção que se aplica a todos os dados de computador. Quando consideramos um dígito hexa, digamos B, podemos estar interessados no valor numérico que ele representa (que é 11) ou podemos estar interessados no padrão de bits que ele representa (1011) sem que tenha qualquer significado numérico. Tenha em mente que, se estamos falando sobre hexa, bits ou quaisquer outros dados do computador, os mesmos dados assumem significados diferentes, dependendo de como os vemos.

Uma pergunta que poderia surgir é: "Por que hexa?" Não é difícil entender que a notação de bit é muito longa e confusa, e que algo mais compacto é necessário para expressar diversos bits de cada vez. Por que quatro bits de cada vez, quando isso nos leva a usar dígitos que não estamos acostumados, como A-F? A resposta é que o hexa é um compromisso razoável entre o que está mais perto da máquina e o que torna mais prático para você e eu trabalharmos. Como a unidade mais comum do computador é o byte, o hexa pode representar de forma conveniente todos os bits em um byte com dois dígitos hexa, cada um representando quatro dos oito bits do byte. O hexa encaixa-se bem no esquema fundamental dos dados de nosso computador.

Até aqui falamos sobre dígitos hexa individuais, mas também precisamos trabalhar com números maiores expressos em hexa. Em particular, os endereços de memória nos levam a números hexa de quatro ou até mesmo cinco dígitos hexa. Portanto, precisamos ter algum sentido de tamanho dos números hexa maiores, e precisamos ser capazes de fazer aritmética com eles.

A aritmética hexa, naturalmente, funciona como a aritmética decimal, mas o valor dos números é diferente. O maior número decimal é 9 (nove) e o número depois dele é 10. O mesmo princípio aplica-se em hexa (ou em qualquer outra base numérica): o maior dígito hexa é F (que tem o valor de 15) e o número depois dele é escrito como 10, que tem o valor de 16; a seguir vem 11 (que é 17) e assim por diante.

Dois dígitos hexa são tudo o que precisamos para expressar todas as combinações de bit possível em um byte. Com oito bits em um byte, há 2 à oitava potência de combinações diferentes, ou 256 diferentes padrões de bit para um byte, de 00000000 a 11111111. Em hexa, 00000000 é 00, e 11111111 é FF. Os quatro primeiros bits são representados pelo primeiro dígito hexa e os quatro últimos pelo segundo dígito hexa.

Podemos usar a Tabela 1 para traduzir entre qualquer padrão de bits e seus equivalentes hexa. Isso é o que fazemos quando estamos apenas olhando para hexa e bits como dados arbitrários. Quando queremos interpretar alguns dígitos hexa como um número, precisamos saber como convertê-los entre hexa e decimal, e precisamos saber como fazer aritmética simples em hexa.

Primeiro, vejamos como avaliar um número hexa. É importante parar e pensar em como avaliamos os números decimais, digamos, o número 123. 123, na realidade, significa 100 mais 20 mais 3. Cada posição à esquerda tem um valor que é 10 vezes maior do que o local à sua direita. O mesmo princípio funciona em hexa, mas o multiplicador é 16, e não 10. Assim, se interpretarmos "123" como um número hexa, ele será 3 + 2 vezes 16 + 1 vez 16 ao quadrado (que é 256): isso totaliza 291 em decimal. A Tabela 2 lista o equivalente decimal para os números hexa redondos de 1 a F0000.

Tabela de valor hexa.
Figura 2 — Tabela de valor hexa.

Se você quiser converter manualmente entre decimal e hexa, poderá usar os números na Tabela 2 para pesquisar os equivalentes. Por exemplo, para converter o número hexa F3A para decimal, veremos o valor de A na primeira coluna (é o decimal 10), de 30 na segunda coluna (48) e de F00 na terceira coluna (3.840). Somando-os, obtemos 3.898 como equivalente decimal de F3A.

Para converter de decimal para hexa, trabalhamos ao contrário, subtraindo conforme prosseguimos. Por exemplo, para converter o número decimal 1.000.000, pesquisamos a maior entrada na tabela hexa que não seja maior do que nosso número decimal. Neste caso, é F0000 no final da última coluna. Subtraímos o valor decimal (983.040) do nosso número inicial e continuamos o processo até que nada seja deixado — então a série de números hexa que subtraímos, combinada, fará o equivalente hexa do nosso número decimal. Neste caso, o valor hexa é F4240.

Felizmente, existem ferramentas que fazem o trabalho de conversão para nós, de modo que não precisamos lançar mão deste processo manual. Existem programas que convertem valores e fazem aritmética em hexa, decimal e binário.

Nenhum comentário:

Postar um comentário