O que é 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 hexadecimal?
terminology
hexadecimal
Justin Krejcha
fonte
fonte
Respostas:
Hexadecimal é um sistema numérico muito comum na computação. Você já deve ter ouvido falar de binário antes, que possui apenas 1s e 0s.
Os seres humanos usam principalmente o sistema decimal (base 10), no qual temos 10 números:
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 (os números binários geralmente são prefixados 0b), com os únicos números sendo 0 e 1.
Nos dias anteriores, octal (ou base 8) era usado. Foi bom porque "10" na base 8 era "0b1000" em binário (10 em decimal é 1010 em binário). Octal é geralmente prefixado "0o" ao escrever números (mas é prefixado apenas '0' na maioria das linguagens de programação). Chama-se base 8 porque temos oito números.
O Octal ainda está sendo usado hoje, principalmente ao definir permissões no Unix e Linux
Com o passar do tempo, precisávamos de uma maneira mais fácil de representar números maiores, pois o poder e o espaço da computação estavam aumentando rapidamente. Tornou-se o padrão usar hexadecimal , ou base 16, porque 16, como 8, é uma potência de 2, o que facilita a conversão de dígito por dígito (veja este comentário .Por causa de 16 números, as letras foram usadas para os outros números.Também, hex é geralmente prefixado com 0x.
Os números hexadecimais também são úteis, pois 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 local "dezenas" à esquerda do número original, que seja 1 e o mais à direita se torne 0. O mesmo acontece com o hexadecimal:
Até chegarmos a 0x1F e, em seguida, o processo se repete até 0xFF (255 em decimal) e, em seguida, obtemos 0x100. Mais informações sobre a contagem podem ser encontradas aqui .
Aqui está um gráfico mostrando as conversões entre decimal, hexadecimal, octal e binário:
fonte
0
prefixo e não os0o
números octais.O sistema hexadecimal é o sistema de numeração da 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 existem apenas 10 dígitos numéricos (em nosso sistema), as letras de A a F são usadas para descrever "dígito nº 10", "dígito nº 11" etc. etc.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.
Torna mais fácil que o binário representar grandes números. Apenas dois dígitos hexadecimais podem representar 256 valores diferentes, como em:
Quatro dígitos hexadecimais podem representar valores 65536 e assim por diante. O Hex facilita muito 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, às vezes, usando outras codificações). Além disso, muitos outros formatos de arquivo (como PNG) são adaptados para que cada informação que o arquivo é composto contenha 256 bits.
Em resumo, 16 é uma potência de 2 e 256 é uma potência de 16. Isso torna uma boa maneira de representar números binários e texto ou outros dados.
fonte
O que é o sistema hexadecimal?
Se você tem um número abcd, então isso é equivalente a ((a * + b) + c) + d. Então é assim:
Em um sistema hexadecimal, você precisa de 16 dígitos, mas temos apenas dez dígitos disponíveis (0..9). Portanto, 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 o cálculo com números, não importa qual base você está usando. Você pode adicionar e multiplicar no sistema binário, no sistema decimal e no sistema hexadecimal. Nós somos usados para 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ê fornecer um número. O número subjacente é o mesmo, apenas a representação é alterada. O computador sempre armazena e usa internamente (por exemplo, calcula com) números em binário.
Então, por que os programadores (como eu) usam diferentes sistemas numéricos? Há duas razões para escolher um sistema numérico baseado em uma potência de 2. Primeiro é a falta e o segundo é uma boa visão de quais bits estão definidos.
Shortness
Se eu tiver uma função que está gravando o conteúdo de um buffer no console, poderia escrever um código que imprima em decimal, com 1 a 3 dígitos (decimal: 0..255). Se eu estiver escrevendo o número no formato binário, acabaria com uma saída de 1 a 8 dígitos (binário: 0..11111111). Eu também poderia usar o sistema octal e terminar com 1 a 3 dígitos (octal: 0..377) ou hexadecimal com 1 a 2 dígitos (hexadecimal: 0..ff).
Isso foi apenas para um byte. Vamos agora assumir que você deseja escrever um número de 32 bits:
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 dar por exemplo atributos de arquivo (consulte MDSN ). Você deseja os atributos "oculto", "arquivar", "somente leitura", "temporário" e outros. Você pode armazenar cada atributo em um byte ou agrupar as informações em um byte (ou vários bytes), em que cada bit representa exatamente um atributo. Se você olhar para o dwFlagsAndAttributes no artigo MSDN, poderá ver que o Windows está usando esse padrão.
Ficando na página do MSDN, tomemos
FILE_ATTRIBUTE_ENCRYPTED
como exemplo, esse sinalizador é 16384 decimal e 0x4000 hexadecimal. O principal "0x" é apenas uma convenção de programador C para marcar números hexadecimais, então veremos 4000. Quando você quiser saber quais bits estão definidos, precisará converter 16384 em binário primeiro - nada que pudesse normalmente fazem com aritmética mental. Mas vamos usar o hexadecimal 4000. Isso é bastante fácil. 16 é 2 * 4, portanto, todo número hexadecimal é exatamente de 4 bits. Portanto, apenas convertemos 4 em binário 0100 e os zeros em binário 0000 e estamos prontos.Frequentemente, não se trata de bits individuais, mas os programadores tendem a alinhar as coisas às potências de 2. Gostamos de carregar os programas não em um endereço aleatório, mas em um endereço com os 16 bits menos significativos configurados 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 endereço carregado em 0x03810000.
Prefere binário, octal ou hexadecimal?
Essa é uma questão de sabor. Se você quiser ver diretamente os bits binários, pode ser bom. Para números longos, o binário pode ser frustrante se você precisar 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, para que você tenha menos contagem envolvida. Pessoalmente, raramente uso octal. Isso é muito incomum.
Mas por que não usar a base 32?
A base 32 é uma potência de 2, isso é ótimo. Mas você precisaria de 32 dígitos como 0..9, A..V. Isso é muito mais dígitos para se lembrar (você consegue identificar facilmente qual número 'S' responderia?). Outra ressalva é que, na base 32, você perde o recurso interessante de que dois dígitos hexadecimais são exatamente um byte, o que é realmente útil se você der uma olhada no conteúdo da memória! Além disso, 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 significa muito para viver com as desvantagens do sistema base 32.
fonte
Os diferentes sistemas de representação numérica em uso atualmente são (= incluem):
binário, octal, decimal e hexadecimal.
Qual escolher geralmente depende da facilidade de uso da tarefa em questão.
binário é usado em sistemas de computador e tecnologia digital em geral, pois é fácil de representar em eletrônicos; As funções para números da base 2 são fáceis de construir, assim como a representação de on / off, true / false ou qualquer outra informação de dois estados repetida semelhante.
é bom ter octal se houver grupos de três dígitos binários, por exemplo, como é o caso nas configurações de permissão no Unix / Linux.
pulando decimal por um momento, hexadecimal é bom da mesma maneira que octal, mas com quatro dígitos binários, e o fato de 8 bits, um byte, se encaixar perfeitamente em dois dígitos hexadecimais. ( = a resposta ) A
seguir, os grupos pares de 8 bits em um computador são facilmente anotados, representados e compreendidos - ou seja; muito conveniente no uso diário ao escrever software, manipular dados (por exemplo, valores de cores rgb em HTML / CSS), formar estruturas de dados e qualquer outra coisa semelhante.
decimal . Pode-se adivinhar que o sistema decimal se desenvolveu a partir do fato de termos dez dedos das mãos e dos pés. Um único dígito representa o número de itens contados, um para cada dedo até o máximo de dez.
Estes representam sistemas numéricos com uma base de:
2, 8, 10 e 16.
Geralmente, a base informa quantos "itens" de um dígito você pode contar, por exemplo, o binário possui dois, o decimal possui dez.
Como hexadecimal possui 16 itens de um dígito, o sistema requer 16 "números", portanto, usando 0-9 e af (6 extras, comparado ao decimal), onde "a" é igual a 10 e "f" é igual a 15 no sistema decimal.
Para continuar no modo geral: qualquer base 2 ou superior funciona bem como qualquer outra coisa, desde que você tenha uma boa representação de um dígito.
Os números em decimal são formados por:
para um número decimal "dcba" - com d, c, b, a, escolhido entre 0123456789
Agora mude isso para:
e você tem uma forma mais geral que mostra como qualquer base 2 ou superior "funciona";
por exemplo, um dígito de cinco dígitos, a base 5 pode ser tão conveniente quanto qualquer um dos outros acima, ou por que não um sistema de 12 dígitos (uma dúzia) por tempo (12 horas = "10" base 12, com o primeiro "decimal" dizendo qual 1/12 [5 minutos] de uma hora é)
Nota: ⁰¹²³ - sobrescrito 0123 se a tela mostrar outra coisa
fonte