Mostrando postagens com marcador Matematica na Informatica. Mostrar todas as postagens
Mostrando postagens com marcador Matematica na Informatica. Mostrar todas as postagens

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