domingo, 27 de fevereiro de 2011

Sistema Hexadecimal, Decimal e Binário

Olá a todos...

Nesse post vou falar sobre os sistemas de numeração. Darei ênfase aos sistemas Decimal, Hexadecimal e Binário, pois são os mais utilizados na programação e na informática em geral.
Esse post ajuda a complementar o meu guia de Assembly, que vocês podem encontrar aqui no GH mesmo...na área de Assembly, logicamente.

E como na maioria dos meus posts, este envolve matemática xDDD

Vamos lá...ja enrolei demais...

O Que São Sistemas de Numeração?
Não podemos definir um sistema de numeração sem antes definirmos o que é um numeral. Um numeral é um símbolo ou conjunto de símbolos que representam um determinado número. Podemos ter 2 ou mais numerais que indiquem o mesmo número, por exemplo, para representar o número 5, podemos simplesmente escrever "5" ou podemos escrever "V", tanto o símbolo "5" quanto o símbolo "V" indicam a mesma quantidade, isto é, o mesmo número.
Um sistema de numeração é um sistema utilizado para organizar a representação dos números através de numerais(símbolos) e torná-la mais compreensível e universal.

Bases dos sistemas de numeração
Todos os sistemas de numeração possuem uma base, por exemplo, o sistema decimal tem base 10, o hexadecimal tem base 16 e o binário tem base 2. A base de um sistema de numeração indica quantos símbolos únicos disponíveis temos para formar os números. Para ficar mais claro, tomemos o sistema decimal como exemplo: o sistema decimal(que é o que utilizamos no noddo dia-a-dia) possui base 10, pois possui 10 símbolos para representarmos os números, os símbolos são: 0,1,2,3,4,5,6,7,8 e 9. No sistema hexadecimal, a base é 16, portanto, ele tem 16 símbolos disponíveis: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E e F. E no binário, 2 símbolos: 0 e 1.

O Sistema Hexadecimal
Bom...não vou falar sobre o sistema decimal, pois todos nós já estamos (pelo menos éramos pra estar) familizarizados com ele, usamos ele a todo instante!
O sistema Hexadecimal, também conhecido somente como "hexa", como eu já disse anteriormente(e quero que o tópico fique grande por isso vou repetir...brincadeira, é claro :cool: ) trabalha com a base 16 e, portanto, possui 16 símbolos disponíveis. E agora a pergunta que não quer se calar e não te deixa dormir: O que é aquele A? e aquele B? e o C? e o D? e o F??? :confused:
O problema é que só utilizamos 10 símbolos para representar números, mas o hexadecimal precisa de 16, por isso, usamos letras para representar os números depois do 9...
"Ahhhh Black-Hat, então o A é o 10, o B é o 11, o C é o 12, o D é o 13, o E é o 14 e o F é o 15?????" Sim! é isso mesmo.

O Sistema Binário
Ah sim...o sistema binário...
Não tem muito o que falar sobre ele nessa pequena introdução. Como já disse antes, ele possui base 2 e os símbolos disponíveis são 0 e 1.
Vou aproveitar pra esclarecer uma coisa, acho que a maioria já sabe, mas 1 bit pode ser um "0" ou um "1" e 1 byte são 8 bits, ou seja, 1 byte são 8 zeros e uns.



Conversões:
Muito bem...até agora só vimos conceitos e teoria, um tanto quanto chato, nada como um pouco de matemática prática para melhorar...
É possível fazer conversões entre os sistemas de numeração, mas é claro que isso envolve matemática. Pra quem odeia matemática e prefere decorar akeles longos e entediantes parágrafos de história, essa parte pode ser uma tortura, mas é necessária. Até quando você vai usar programinhas "mágicos" que convertem de Hexa pra Decimal e etc??? Já está na hora de fazer o seu e se você já fez copiando e colando o código-fonte, está na hora de entender como tudo funciona e como o windows faz pra converter esses números. Afinal, você pode se deparar com uma situção na qual você não tenha o seu "programinha mágico" e tenha que converter... daí, meu amigo, se você não souber...

Decimal para qualquer outra base:
Vamos usar como exemplo, número 666 (decimal) (Mua hua hua...)
Para convertermos um número decimal para qualquer outra base, devemos dividir pelo número da base até que o dividendo seja menor que o número da base. Depois, pegamos os restos "debaixo para cima" e teremos o número.
"Meu Deus, Black-Hat, vou parar de ler isso!!!!! Não entendi nadaa!!!! :mad: "
Calma, vou exemplificar e você vai entender o "blá blá blá"...

Exemplo:
Pegando como exemplo o 666 em decimal, vamos convertê-lo para hexadecimal(base 16), seguindo o "blá blá blá" que escrevi ali em cima...

Primeiros dividiremos o número pela base(16) até que o dividendo(numero que está sendo dividido) seja menor do que a base, acompanhe:

666 / 16 = 41, Resto 10
41 / 16 = 2, Resto 9
2 / 16 = 0, Resto 2 -> o dividendo se tornou menor que o número da base ( 2 < 16 ), neste caso, o resultado da divisao é 0 e o resto é o próprio dividendo.

Agora, o "blá blá blá" diz para pegarmos os restos "debaixo para cima" e formarmos o número, vamos lá:

O último resto é o 2, depois o 9 e lá em cima temos o 10. Agora basta juntarmos esses símbolos e teremos o número em hexa.
"Ahhh, entendi, Black-Hat, então o número é 2910, né?"
Infelizmente não, lembre-se que em hexa o 10 equivale a A, então onde o resto deu 10, substitua por A e então junte tudo...
"HAHA....agora eu sei...o número 666 em hexa é 29A!!!!!!!!!!!!!!!!!!"
Exato!

Você pode utilizar esse mesmo método para converter de decimal para binário, decimal para octal e assim vai....decimal para qualquer coisa =)
Só para treinar, vou transformar agora 666 em binário(base 2):
666 / 2 = 333, resto 0
333 / 2 = 166, resto 1
166 / 2 = 83, resto 0
83 / 2 = 41, resto 1
41 / 2 = 20, resto 1
20 / 2 = 10, resto 0
10 / 2 = 5, resto 0
5 / 2 = 2, resto 1
2 / 2 = 1, resto 0
1 / 2 = 0, resto 1
Agora pegando os restos debaixo pra cima, temos: 1010011010
E esse é o número 666 em binário ;D

De qualquer outra base para decimal:
HAHA...vamos complicar um pouco mais x)
Para convertermos um número de uma outra base qualquer (chamarei a base de "b") para a base 10 (decimal), devemos escrever o número, depois multiplicarmos cada algarismo do número pela base à qual pertence o número e, da direita para a esquerda, começando do 0, elevarmos as bases, acrescentando 1 em cada.
"CHEGA, Black-Hat, desisto de ler isso! Tchau!"
Tá vendo porque história não é legal? Um monte de palavras a serem decoradas e difíceis de serem interpretadas...
Vamos à prática que isso fica muuuito mais fácil =)

Tomemos como exemplo o 29A (que você já sabe que é o 666 em decimal).
Segundo o "blá blá blá 2", devemos escrever o número, façamos isso:
Código:
2                 9                  A
Muito bem, escrevemos ele, com um pouco de espaço entre os algarismos. Agora, o "blá blá blá 2" nos manda multiplicar cada algarismo pela base à qual o número pertence, como o número está na base 16, multiplicaremos por 16, vejamos:

Código:
2x16            9x16              10x16  (lembre-se de que o A é 10)
Agora, o todo-poderoso "blá blá blá 2" nos manda elevar as bases que estão multiplicando aos seus respectivos expoentes, da direita para a esquerda, começando do 0 e acrescentando 1. Vou usar o símbolo ^ para inidicar "elevado a", então, temos:

Código:
2x16^2        9x16^1          10x16^0
Observe que SÓ o "16" deve ser elevado ao seu determinado expoente e nao o conjunto todo...
Agora faça as continhas xD

Código:
2x256         9x16               10x1

Código:
512            144                 10
Agora simplesmente some 512, 144 e 10:
Código:
512     +       144    +       10   =  666
Pronto! aí está o número na base 10 =)

Você pode usar este método para converter de qualquer outra base para a base 10... xD


Conclusão:
MEU DEUS! E ainda tem conclusão??????

Sim, tem...mas é rapidinha ;D
Bom...espero que tenham gostado, deu um pouquinho de trabalho para fazer e tudo o que está aqui é de autoria minha, como sempre. Não gosto de copiar e colar nada, afinal, se for pra eu copiar e colar é mais fácil eu postar o link do site original. =P
Caso alguém vá copiar isso coloque os créditos, caso contrário algo pode acontecer...(por que você acha que usei o número 666? Mua hua hua!)

Espero que alguém tenha aprendido algo e que esse tópico seja útil

0 comentários:

Postar um comentário