Números binários e hexadecimais explicados para desenvolvedores
Imagens Getty
Os sistemas de números binários e hexadecimais sustentam a forma como os sistemas de computador modernos funcionam. Interações de baixo nível com hexadecimal (hex) e binário são incomuns no mundo da programação Java, mas os desenvolvedores de software ocasionalmente operam no nível de bits e bytes. A capacidade de entender como esses sistemas numéricos alternativos funcionam é uma habilidade importante que um desenvolvedor de software experiente deve ter.
Trabalhar em hexadecimal ou binário pode parecer estranho e confuso em comparação com o sistema numérico de base 10 usado em nosso mundo cotidiano. Não é ciência de foguetes, mas requer ajustar a forma como se pensa sobre números e numerais. Os exemplos binários e hexadecimais a seguir explicam como essas alternativas ao sistema numérico baseado em decimal funcionam e se comportam.
Vamos começar a entender os sistemas numéricos binários e hexadecimais com um exemplo do mundo real.
Considere o numeral 500. Em um sistema numérico, cada dígito representa uma potência da base. Para o sistema numérico de base 10, cada dígito representa uma potência de 10. Veja como a base 10 descreve o numeral 500:
centenas
dezenas
uns
102
101
100
5
0
0
Na tabela acima, a coluna mais à esquerda descreve unidades de 100 (102), a coluna do meio descreve unidades de 10 (101) e a coluna mais à direita descreve unidades de um (100). Assim, podemos expressar o valor de 500 na base 10 como cinco unidades de 100, zero unidades de 10 e zero unidades de um, todas somadas.
A base 10 é ótima para humanos, mas - por razões relacionadas aos estados de energia ligado e desligado - os computadores usam um sistema numérico de base 2. Com base 2, ou binária, cada dígito representa uma potência de 2 e os dígitos são descritos como apenas dois números: 0 e 1. A tabela abaixo mostra a conversão de binário para decimal do valor de 500:
Valores de expoente expressos em decimal
256
128
64
32
16
8
4
2
1
28
27
26
25
24
23
22
21
20
1
1
1
1
1
0
1
0
0
(Nota: uma unidade de 20 = 1)
Assim, 50010 = 1111101002. Ou, dígito a dígito na base 2: 500 = (256 + 128 + 64 + 32 + 16 + 0 + 4 + 0 + 0)
Existem mais duas regras para calcular números no sistema binário. Primeiro, no mundo da computação digital, cada dígito de um número de base 2 é chamado de bit. Assim, os seguintes números representam valores de três bits: 000, 001, 011, 100, 101, 110 e 111. Da mesma forma, oito dígitos são valores de oito bits, como 10101010, juntamente com 11110000 e 11111111.
Em segundo lugar, os bits são agrupados em uma unidade organizacional chamada byte. Normalmente, um byte é um grupo de oito bits, como o número 10101010. Agrupar oito bits em um byte é convencional, embora algumas tecnologias, como buffers de protocolo, organizem um byte como um grupo de sete bits.
Trabalhar com bits e bytes usando notação binária pode ser difícil apenas no nível visual. Considere a expressão binária 1001001011011001 - esse número é difícil para o cérebro de qualquer pessoa decifrar.
Os números binários podem ser intimidantemente longos, mas os hexadecimais são exatamente o oposto. Os números hexadecimais descrevem um número em menos números do que o sistema numérico binário e de base 10.
A primeira coisa a entender sobre o sistema hexadecimal é que ele é composto por dezesseis algarismos:
0 1 2 3 4 5 6 7 8 9 abcdef
Em qualquer sistema numérico, cada dígito representa uma potência da base. No sistema de base 10 (decimal), o numeral 10 representa uma unidade de 101 e zero unidades de 100. No sistema hexadecimal, o numeral 10 representa uma potência do número 16, conforme tabela abaixo:
Valores de expoente expressos em decimal
65.536
4.096
256
16
1
164
163
162
161
160
Assim, o decimal 10 descreve um valor de 10 na base 10, enquanto em hexadecimais o numeral 10 se converte em 16. Podemos ilustrar a conversão da seguinte forma: