O que é o sistema hexadecimal?

14

Qual é o sistema hexadecimal e por que é tão usado na computação? Eu sei que os computadores usam 0s e 1s para armazenar dados, então como usamos o hexadecimal?

    
por a-- 06.06.2014 / 00:21

3 respostas

32

O hexadecimal é um sistema numérico muito comum na computação. Você pode ter ouvido falar do binário antes, que tem apenas 1s e 0s.

Os humanos usam principalmente o sistema decimal (base 10), no qual temos 10 numerais:

0, 1, 2, 3, 4, 5, 6, 7, 8 and 9

No entanto, os computadores não operam usando o sistema decimal. Eles têm um estado binário (algo é verdadeiro ou falso) e, portanto, opera na base 2 (números binários geralmente são prefixados 0b) com os únicos numerais sendo 0 e 1.

Nos dias anteriores, octal (ou base 8) foi usado. Foi bom porque "10" na base 8 era "0b1000" em binário (10 em decimal é 1010 em binário). O octal geralmente é prefixado com "0o" ao escrever números (mas é prefixado apenas com '0' na maioria das linguagens de programação). É chamado base 8 porque temos oito numerais.

O Octal ainda está sendo usado hoje, principalmente quando definindo permissões no Unix e no Linux

Conforme o tempo passava, precisávamos de uma maneira mais fácil de representar números maiores, à medida que o poder e o espaço de computação aumentavam rapidamente. Tornou-se o padrão para usar hexadecimal , ou base 16, porque 16, como 8 é uma potência de 2, o que torna fácil de fazer conversão dígito por dígito (consulte este comentário . Como existem 16 numerais, as letras foram usadas para os outros numerais, e o hex geralmente é prefixado com 0x.

Os números hexadecimais também são úteis, uma vez que um número hexadecimal é de 4 bits (1 número octal pode representar 2) e, portanto, dois números em um byte. Na maioria dos editores hexadecimais , é assim que um byte é representado.

Contando

Na base 10, temos 10 numerais. Depois das 9, o que fazemos? Estamos sem numerais. Criamos um espaço "dezenas" à esquerda do número original, temos que ser 1 e o mais à direita se torna 0. A mesma coisa acontece em hexadecimal também:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, etc

Até chegarmos a 0x1F, e então o processo se repete até 0xFF (255 em decimal) e então obtemos 0x100. Mais informações sobre contagem podem ser encontradas aqui .

Aqui está um gráfico mostrando as conversões entre decimal, hexadecimal, octal e binário:

    
por 06.06.2014 / 00:21
4

What is the hexadecimal system

O sistema hexadecimal é o sistema de numeração de base 16 que usa 16 dígitos ( 0123456789ABCDEF ), em oposição ao binário que usa 2 ( 01 ), ou decimal que usa 10 (0-9). Como há apenas 10 dígitos numéricos (em nosso sistema), as letras de A a F são usadas para descrever "dígito # 10", "dígito # 11" etc., em vez disso.

why is it used so much in computing

16 é uma potência de 2, o que facilita a conversão de números hexadecimais em números binários e, como você observou, "os computadores usam 0s e 1s para armazenar dados". Como cada dígito armazena exatamente 4 bits de dados, um dígito hexadecimal pode ser convertido em 4 dígitos binários (1 bit) com muita facilidade e vice-versa.

| hex bin  | hex bin  |
| 0   0000 | 8   1000 |
| 1   0001 | 9   1001 |
| 2   0010 | A   1010 |
| 3   0011 | B   1011 |
| 4   0100 | C   1100 |
| 5   0101 | D   1101 |
| 6   0110 | E   1110 |
| 7   0111 | F   1111 |

how come we use hexadecimal

Torna mais fácil do que o binário representar números grandes. Apenas dois dígitos hexadecimais podem representar 256 valores diferentes, como em:

dec  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...
hex 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 ...

Quatro dígitos hexadecimais podem representar 65536 valores e assim por diante. O Hex torna muito mais fácil a inspeção de dados com algo chamado hexdump , pois letras, números e pontuação são armazenados em um formato que mapeia cada caractere para um número entre 0 e 256 (chamado ASCII , ou algumas vezes usando outras codificações). Além disso, muitos outros formatos de arquivo (como o PNG) são adaptados para que cada pedaço de informação do qual o arquivo é composto contenha 256 bits.

Em resumo, 16 é uma potência de 2 e 256 é uma potência de 16. Isso faz com que seja uma boa maneira de representar números binários e texto ou outros dados.

    
por 06.06.2014 / 18:37
2

O que é o sistema hexadecimal?

Se você tiver um número abcd, então isso é equivalente a ((a * + b) + c) + d. Então é assim:

  • abcd (binário) = ((a * 2 + b) * 2 + c) * 2 + d
  • abcd (octal) = ((a * 8 + b) * 8 + c) * 8 + d
  • abcd (decimal) = ((a * 10 + b) * 10 + c) * 10 + d
  • abcd (hexadecimal) = ((a * 16 + b) * 16 + c) * 16 + d

Em um sistema hexadecimal você precisa de 16 dígitos, mas temos apenas dez dígitos disponíveis (0..9). Então, para os 6 dígitos ausentes, os caracteres A..F são usados com A = 10, ..., F = 15.

É claro que você também pode pensar em muitos outros sistemas numéricos, por exemplo, com base de 5 ou 7.

Para cálculo com números, não importa qual base você está usando. Você pode adicionar e multiplicar no sistema binário, você pode fazê-lo no sistema decimal e você pode fazê-lo no sistema hexadecimal. Estamos acostumados a calcular no sistema decimal, os computadores fazem isso no sistema binário.

Por que o sistema hexadecimal é tão usado na computação?

Como dito acima, não importa em qual sistema numérico você forneça um número. O número subjacente é o mesmo, apenas a representação é alterada. O computador sempre armazenará e usará internamente (por exemplo, calcular com) números em binário.

Então, por que os programadores (como eu) usam sistemas numéricos diferentes? Existem duas razões para escolher um sistema numérico baseado em uma potência de 2. A primeira é a falta e a segunda é uma boa visão de quais bits são definidos.

Falta

Se eu tenho uma função que está escrevendo o conteúdo de um buffer para o console, então eu poderia escrever o código que é impresso em decimal, que é de 1 a 3 dígitos (decimal: 0.255). Se eu estou escrevendo o número em formato binário, eu acabaria com uma saída de 1 a 8 dígitos (binário: 0.11111111). Eu também poderia usar o sistema octal e acabar com 1 a 3 dígitos (octal: 0..377) ou hexadecimal com 1 a 2 dígitos (hexadecimal: 0..ff).

Isto foi apenas para um byte. Vamos supor agora que você quer escrever um número de 32 bits:

  • binário: 0.11111111111111111111111111111111
  • octal: 0..37777777777
  • decimal: 4294967295
  • hexadecimal: 0..ffffffff

Como você pode ver, a saída hexadecimal é a mais curta.

Vendo os bits

Um padrão comum para armazenar informações compactadas é usar cada bit em um byte individualmente. Vamos pegar, por exemplo, atributos de arquivo (consulte MDSN ). Você quer os atributos "hidden", "archive", "readonly", "temporary" e outros. Você pode armazenar cada atributo em um byte ou pode compactar as informações em um byte (ou vários bytes), onde cada bit representa exatamente um atributo. Se você observar o dwFlagsAndAttributes no artigo do MSDN, poderá ver que o Windows está usando esse padrão.

Permanecendo na página do MSDN, vamos usar FILE_ATTRIBUTE_ENCRYPTED como exemplo, esse sinalizador é decimal 16384 e hexadecimal 0x4000. O "0x" líder é apenas uma convenção do programador C para marcar números hexadecimais, então vamos apenas olhar para 4000. Quando você quiser saber quais bits estão configurados, então você precisará converter 16384 para binário primeiro - nada que você possa normalmente faz com aritmética mental. Mas vamos pegar o hexadecimal de 4000. Isso é bem fácil. 16 é 2 * 4, portanto, cada número hexadecimal é exatamente 4 bits. Por isso, convertemos apenas 4 em binário 0100 e os zeros em binário 0000 e estamos prontos.

Muitas vezes não se trata de bits individuais, mas os programadores tendem a alinhar as coisas com potências de 2. Gostamos de carregar programas não para um endereço aleatório, mas para um endereço com os 16 bits menos significativos definidos como zero. Dessa forma, se você tiver um endereço 0x12345678, poderá ver facilmente que esse endereço pertence ao programa carregado em 0x1234 e não ao carregado em 0x03810000.

Prefere binário, octal ou hexadecimal?

Essa é uma questão de sabor. Se você quiser ver diretamente os bits, o binário pode ficar bem. Para números longos, o binário pode ser frustrante se você tiver que contar os dígitos para ver se o bit 23 ou 24 está definido. Isso é mais fácil com o hexadecimal porque cada dígito representa 4 bits, então você tem menos contagem envolvida. Pessoalmente eu raramente uso octal. É muito incomum.

Mas por que não usar a base 32?

Base 32 é uma potência de 2, isso é ótimo. Mas você precisaria de 32 dígitos como 0..9, A..V. Isto é muito mais dígitos para lembrar (você consegue identificar facilmente qual número 'S' responderia?). Outra ressalva é que com a base 32 você perde o bom recurso de que dois dígitos hexadecimais são exatamente um byte, o que é muito útil se você der uma olhada no conteúdo da memória! Também com a base 32 você ainda precisa de 2 dígitos para representar os valores que um byte pode ter. Para um valor de 32 bits, você precisa apenas de 7 dígitos em vez de 8 dígitos hexadecimais, mas isso não é muito para conviver com as desvantagens do sistema base 32.

    
por 11.06.2014 / 11:52