"Olá, amigo!"
"Oi, Bilaabo!"
"Quero falar um pouco sobre os diferentes sistemas de numeração."
"Você já ouviu falar que as pessoas usam o sistema decimal. Aqui estão os principais fatos desse sistema:
1) 10 dígitos são usados para escrever números: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
2) O número 543 significa 5 centenas + 4 dezenas + 3 unidades.
"Isto é equivalente a escrever 5*100 + 4*10 + 3*1, que pode ser escrito como 5*10 2 + 4*10 1 + 3*10 0 .
Observe que milhares, centenas, dezenas e unidades são potências do número 10.
1) Um é 10 elevado a zero.
2) Dez é 10 elevado à primeira potência.
3) Cem é 10 elevado à segunda potência.
4) Mil é 10 na terceira potência, etc.
"Sim. Entendi."
"Mas agora imagine que temos apenas 8 dígitos. Então temos o sistema octal. Aqui estão seus principais fatos:"
1) 8 dígitos são usados para escrever números: 0, 1, 2, 3, 4, 5, 6, 7.
2) O número 543 8 significa 5*8 2 +4*8 1 +3*8 0 . Em outras palavras, é 5*64 + 4*8 + 3*1 = 320+32+3 = 320+32+3=355 10
Escrevi 8 e 10 como subscritos para indicar quantos dígitos são usados para representar o número.
"Acho que entendi. Acho que poderia converter um número do sistema octal para decimal. Mas provavelmente não poderia fazer o contrário."
"Não é tão difícil. Imagine que você precise usar vários caminhões para mover uma pilha de areia. Você tem caminhões basculantes, caminhões comuns e caminhões muito pequenos. Mas os caminhões não podem ir se não estiverem cheios."
"Como você faria?"
"Primeiro eu enchia os caminhões basculantes, já que são os maiores. Depois, quando via que não tinha areia para encher o caminhão, passava para os menores. E depois para os menores ainda."
"Na verdade, é muito semelhante aqui. Vamos tentar converter o número 355 10 de volta para octal."
"Primeiro, dividimos por 64 (8 2 ) e obtemos 5 com resto 35. Isso significa que o primeiro dígito do nosso número é 5. Em seguida, dividimos o resto por 8 (8 1 ) e obtemos 4 com resto de 3. Assim, obtemos o número 543 8 ."
"A propósito, você também pode se mover na outra direção. Afinal, 543 8 == 5*64+4*8+3 == ((5)*8+4)*8+3. Nossas "dezenas" octal " e "centenas" devem ser divididos por 8. Portanto, o restante da divisão por 8 será nossos dígitos octais."
"Primeiro, vamos dividir 355 por 8. Obtemos 44 com resto 3. Ou seja, 355=44*8+3. E 44 pode ser representado como 5*8+4. Assim, 355= (5*8+ 4)*8+3; Aqui estão nossos dígitos: 5, 4, 3. O número que procuramos é 543 8 ."
"Acho que entendi, mas vou precisar praticar um pouco para entender tudo até o fim."
"A programação geralmente envolve o uso de números com bases diferentes (ou seja, o número de dígitos usados no sistema de numeração). Os mais populares são 2, 8, 10, 16 e 64."
"Mas por que isso é necessário? Por que precisamos de números representados por 2, 8, 16 ou 64 dígitos?"
"É sobre como o processador funciona internamente. Muito simplista, se a corrente está fluindo através de um fio, então dizemos que seu valor é 1; se não houver corrente, então seu valor é 0. Todos os números são armazenados em células de memória. Esses as células têm um design muito básico e só podem armazenar 0 ou 1."
"Mas essa simplificação (apenas 0 ou 1) tornou possível tornar os elementos dentro do processador e da memória muito pequenos. Os processadores e módulos de memória modernos incluem bilhões de elementos diferentes. E sua área geralmente não passa de um centímetro quadrado."
"Uau. Agora eu sei."
"Agora nos voltamos para números binários. Aqui temos a mesma coisa que com octal, só que mais fácil."
1) 2 dígitos são usados para escrever números: 0, 1.
2) O número 101 2 significa 1*2 2 + 0*2 1 + 1*2 0 . Em outras palavras, é 1*4+0*2+1*1 =4+1=51 10
"Sim. Eu me lembro. Uma célula, que pode ter um valor de 0 ou 1, é chamada de bit. Mas ela não pode armazenar muita informação, então elas são combinadas em grupos de 8. Esses grupos são chamados de bytes. "
"Exatamente. Um byte é um grupo de oito bits. Ele pode armazenar os seguintes valores: 00000000, 00000001, ... 11111111. Esses valores correspondem aos números decimais 0,1, ... 255. O que nos dá um total de 256 valores."
Qual é o maior inteiro em Java? Ou melhor, qual é o seu tipo?
"Um long. Um long consiste em 8 bytes. Em outras palavras, 64 bits. Ele pode armazenar valores de -2 63 até 2 63 -1.
"Sim. Não vou falar sobre como converter números de decimal para binário ou vice-versa. Caso contrário, a lição seria muito longa."
"Em vez disso, vamos falar um pouco mais sobre o sistema hexadecimal."
"Sim, é muito interessante. Para os sistemas binário e octal, simplesmente eliminamos os dígitos, começando com dois e oito, respectivamente. Mas o que fazemos aqui? Acrescentamos novos dígitos?"
"Exatamente! Olhe para isso:"
1) 16 dígitos são usados para escrever números: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
2) O número 543 16 significa 5*16 2 + 4*16 1 + 3*16 0 . Em outras palavras, é 5*256+4*16+3*1 = 1280+64+3 = 1347 10
"Então, acabamos de adicionar letras como dígitos? O_o"
"Sim. E qual é o problema? Por que inventar novos números quando as letras funcionam perfeitamente bem? Confira:"
dígito hexadecimal | Valor decimal |
---|---|
0 | 0 |
1 | 1 |
8 | 8 |
9 | 9 |
A | 10 |
B | 11 |
C | 12 |
D | 13 |
E | 14 |
F | 15 |
"Também não vou falar sobre a conversão de decimal para hexadecimal. Mas aqui está um fato interessante. Um dígito hexadecimal é representado por exatamente 4 bits, com valores de 0 a 15. Portanto, um byte pode ser escrito com oito dígitos binários (0 ou 1) ou dois dígitos hexadecimais."
"Aqui está um exemplo:"
Número decimal | Número binário | número hexadecimal |
---|---|---|
0 | 0000 0000 | 00 |
1 | 0000 0001 | 01 |
15 | 0000 1111 | 0f |
16 | 0001 0000 | 10 |
31 | 0001 1111 | 1f |
32 | 0010 0000 | 20 |
128 | 1000 0000 | 80 |
129 | 1000 0001 | 81 |
255 | 1111 1111 | ff |
"A representação hexadecimal é facilmente convertida em binário (e vice-versa). É por isso que a representação de bytes internos de um número raramente é fornecida em binário (usando 0s e 1s) na programação. Isso seria muito longo e difícil de entender. Notação hexadecimal é muito mais legível e compacto."
"Eu concordo. Até eu gostei."
"A propósito, Java permite escrever números em vários sistemas de numeração diretamente no código:"
Base | Característica distintiva | Exemplos | Números inválidos |
---|---|---|---|
2 | 0b no início do número | 0b 00001111 | 0b 11111 2 1 |
8 | 0 no início do número | 0 1234343 | 0 12 8 |
10 | Nenhum | 95459 | 909 a |
16 | 0x no início do número | 0x10ss _ | 0x 1c gh |
"Excelente aula. Obrigado, Bilaabo."
GO TO FULL VERSION