1. Codificação octal
Falando em codificações... Como você sabe, na vida cotidiana usamos a notação decimal : todos os nossos números são representados por 10 símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Existem 10 numerais, então o sistema é chamado de decimal.
Mas os programadores são grandes inventores. Eles imediatamente criaram codificações que usam um número diferente de símbolos. Por exemplo, 16, 8 e 2.
A codificação alternativa que usa 8 símbolos é a mais fácil: basta eliminar o 8 e o 9 e obter uma codificação octal (o sistema de numeração octal ).
E, sim, você pode usar o sistema octal para especificar literais numéricos. Se, claro, você realmente precisar. É mais fácil do que parece. Você só precisa escrever o número 0 antes do número.
Em outras palavras, Java trata qualquer literal inteiro começando com 0 como um valor octal.
Exemplos:
Código | Notas |
---|---|
|
x é 13: 1*8+5 |
|
x é 21: 2*8+5 |
|
x é 83: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0 |
|
Isso não irá compilar: 8 não é um dos símbolos usados na codificação octal. |
É improvável que você precise escrever números octais em seu código, mas você deve saber o que são. Afinal, você terá que ler o código escrito por outras pessoas. E como mencionado acima, os programadores são grandes inventores.
Bem, lembre-se de que você não pode simplesmente escrever 0 na frente de cada número.
2. Codificação binária
A codificação binária é ainda mais interessante. Se o octal tiver apenas os dígitos de 0 a 7, o binário terá apenas 0 e 1. Por que essa codificação é necessária?
Isso tem tudo a ver com a estrutura interna de um computador. Tudo em um computador funciona com eletricidade e, por acaso, a maneira mais eficiente de armazenar e transmitir algo usando eletricidade é usar dois estados: ou não há eletricidade no fio (zero) e há eletricidade (um).
Esta é a origem da popularidade do sistema numérico binário.
Em princípio, não é usado com muita frequência em Java: Java é considerada uma linguagem de alto nível, completamente abstraída do hardware em que é executada. Na verdade, você realmente se importa com o formato usado para armazenar e processar dados dentro de um computador?
Mas nas últimas décadas, os programadores passaram a amar a codificação binária (e outras codificações baseadas nela). Como resultado, Java possui operadores que recebem números binários como entradas. E a precisão dos números de ponto flutuante depende de sua representação binária.
Basicamente, é melhor você saber sobre essa codificação do que não saber.
E como foi o caso da codificação octal, Java tem uma maneira de codificar literais usando o sistema binário. Ou seja, literais compostos apenas por 0s e 1s. Para que o compilador Java entenda que o código contém um literal numérico codificado em binário em vez de simplesmente um número decimal que consiste em zeros e uns, todos os literais binários são identificados usando o prefixo 0b ( o 'b' vem da palavra binário) .
Exemplos:
Código | Notas |
---|---|
|
х é 4: 1*4+0*2+0 |
|
х é 15: 1*8+1*4+1*2+1 |
|
х é 967: 1*2 9 +1*2 8 +1*2 7 +1*2 6 +0*2 5 +0*2 4 +0*2 3 +1 *2 2 + 1*2+1; |
|
Isso não compilará: 2 não é um dos símbolos usados na codificação binária. |
3. Codificação hexadecimal
Além das codificações octal e binária, os literais também podem ser escritos em hexadecimal. Esta é uma codificação muito popular.
Isso ocorre porque, embora a notação binária seja o mais próximo possível de como os números são realmente armazenados, é muito difícil para os humanos trabalhar efetivamente com esses números: em binário, o número um milhão contém 20 dígitos, não 7.
É por isso que os programadores criaram o sistema hexadecimal. Afinal, 16 é 2 elevado à 4ª potência, então exatamente 4 bits correspondem a um dígito hexadecimal. Grosso modo, cada 4 bits agora pode ser escrito como um único dígito hexadecimal.
A codificação hexadecimal também possui seu próprio prefixo exclusivo: 0x . Exemplos:
Número decimal | Notação binária | notação hexadecimal |
---|---|---|
17 | 0b 0001 0001 | 0x 1 1 |
4 1 | 0b 0010 1 00 1 | 0x 2 9 |
85 | 0b 0101 0101 | 0x 5 5 |
256 | 0b 1 0000 0000 | 0x 1 0 0 |
Ok, você diz, está claro como chegamos ao sistema octal: apenas jogamos fora os números 8 e 9, mas onde conseguimos os 6 símbolos extras para o sistema hexadecimal? Eu gostaria de vê-los!
É tudo simples. As primeiras 6 letras do alfabeto inglês foram tomadas como os 6 símbolos que faltam: A (10), B (11), C (12), D (13), E (14), F (15).
Exemplos:
notação hexadecimal | Notação binária | Número decimal |
---|---|---|
0x1 _ | 0b 0000 0001 | 1 |
0x9 _ | 0b 0000 1001 | 9 |
0x A | 0b 0000 1010 | 10 |
0xB _ | 0b 0000 1011 | 11 |
0x C | 0b 0000 1100 | 12 |
0x D | 0b 0000 1101 | 13 |
0x E | 0b 0000 1110 | 14 |
0xF _ | 0b 0000 1111 | 15 |
0x1 F _ | 0b 0001 1111 | 31 |
0x A F | 0b 1010 1111 | 175 |
0x F F | 0b 1111 1111 | 255 |
0x F F F | 0b 1111 1111 1111 | 4095 |
4. Como converter um número de hexadecimal
Converter um número de hexadecimal para decimal é muito fácil. Digamos que você tenha o número 0 x A F C F . Quanto é isso em decimal?
Primeiro, temos um sistema numérico posicional, o que significa que a contribuição de cada dígito para o número total aumenta em um fator de 16 à medida que nos movemos da direita para a esquerda:
A * 16 3 + F * 16 2 + C * 16 1 + F
O símbolo A corresponde ao número 10, a letra C corresponde ao número 12 e a letra F representa quinze. Nós temos:
10 * 16 3 + 15 * 16 2 + 12 * 16 1 + 15
Elevando 16 às várias potências que correspondem aos dígitos, obtemos:
10 * 4096 + 15 * 256 + 12 * 16 + 15
Somamos tudo e obtemos:
45007
Você sabe como esse número é armazenado na memória:
0x A F C F
Mas agora vamos convertê-lo para binário. Em binário seria:
0b 1010 1111 1100 1111
Cada conjunto de quatro bits corresponde a exatamente um caractere hexadecimal. Isso é super conveniente. Sem qualquer multiplicação ou exponenciação."
GO TO FULL VERSION