sábado, 7 de maio de 2011

CTRL+C / CTRL+V do dia - AlgoramaA


Binários, Hexa?






Que informática é inteiramente baseada em números já não deve restar dúvida. 
A informática foi derivada da lógica matemática, e foi por meio dela que houve a possibilidade de se criar máquinas. Mas até que ponto a matemática que conhecemos chega? 
Será que não há possibilidade de estender nosso conhecimento sobre números, e aplica-los na informática?
SIM! Os seres humanos sempre tentaram usar os números a seu favor, por isso somos chamados de seres racionais. Desde a descoberta do fogo, passando pela primeira invenção do mundo, a roda, até os dias atuais, em que você pode conversar com uma pessoa que mora a 3000 km de você bastando um toque. A tecnologia depende do conhecimento humano, o conhecimento humano depende da lógica e a lógica depende da matemática. Mas a matemática não se faz apenas dos números que nós, estudantes, conhecemos. Muitas vezes temos que ir além.
O sistema de classificação de capacidade física e lógica na informática é baseado na potência de 2. Existem bits, bytes, kilobytes, megabytes, gibabytes, terabytes... Cada um desses tem uma correlação com o nível anterior, que geralmente vai na ordem de 1024, menos o byte. O bit é a unidade elementar da informática, é considerado a menor unidade de medida. Oito bits formam umbyte, que é o caracter (considera-se caracter qualquer elemento que possa compor um texto, seja ele letra, número ou símbolo, e que esteja presente no código ASCII). A partir daí, 1024 bytes formam um kilobyte, 1024 kilobytes formam um megabyte, 1024 megabytes formam um gigabyte, e assim por diante.
Em 1703, na Alemanha, um matemático chamado Gottfried Leibniz elaborou um artigo científico traduzido como "Explicação da Aritmética Binária", em que se desenvolvia operações e cálculos matemáticos apenas com dois números: 0 e 1. Foi considerado o marco inicial do Sistema Binário moderno, pois, pela primeira vez, questionou-se o sistema já tão utilizado e conhecido de 10 algarismos (0, 1, 2, 3, 4, 5, 6, 7, 8 e 9). No começo é bem difícil calcular de cabeça, por exemplo, a soma de dois números binários, mas, se analisar ao fundo, veremos que se trata de um mesmo padrão utilizado na aritmética decimal. Em decimais, um número com um algarismo chama-se unidade, com dois chama-se dezena, com três chama-se centena, e por aí vai. O número de referência para a quantidade de algarismos que um número tem é sempre a base numérica (neste caso, decimal = 10) elevado à posição do último algarismo. Então, partindo-se do pressuposto que a matemática sempre conta como princípio o número 0, temos: 
100 = 1 (unidade);
101 = 10 (dezena);
102 = 100 (centena);
103 = 1000 (milhar)...
No caso dos binários, a base é 2, ou seja, só existem dois algarismos possíveis de se utilizar: 0 e 1. Então, utiliza-se o mesmo padrão de posicionamento:

20 = 1;
21 = 2;
22 = 4;
23 = 8...
(Xy Lê-se: X na base Y. Base é o sistema de numeração que se está utilizando. Binários são na base 2, decimais são na base 10, hexadecimais são na base 16, e assim por diante.)
No sistema de contagem decimal, temos que os algarismos representam quantas unidades, dezenas, centenas, milhares, etc. temos nas respectivas posições, ou seja:
49210 = 400 + 90 + 2 (4 centenas + 9 dezenas + 2 unidades)
Já nos binários, temos apenas duas possibilidades de quantidades: ou uma ou nenhuma. Portanto, fica mais fácil para a máquina decidir qual será o resultado final do número. Observando o método formal de formação dos números, temos que:

49210 = 4.102 + 9.101 + 2.100
11012 = 1.23 + 1.22 + 0.21 + 1.20 = 1310

Como na informática, o byte é composto de 8 bits, o bit pode estar ligado ou desligado, temos a comparação com os binários. Um byte (uma cadeia de bits) é um conjunto de 8 números binários, ou seja, as sequências binárias chegam até 8 posições. Assim sendo, o byte tem a capacidade de 28 = 256, portanto, podemos contar de 0 até 255 usando um byte. Percebem que, usando um número relativamente grande, nós só consumimos uma mínima parte da capacidade do computador? É esse o objetivo dos binários: simplificar para amplificar.
Aqui vai um bom e interessante exemplo sobre binários. Um desafio: como contar até 32 em apenas uma mão? Um dedo levantado representa 1, e dedo abaixado representa 0. Perceba como é a formação dos números sequenciais: Clique aqui
Agora, os hexadecimais. Se números com apenas duas possibilidades já foram meio difíceis de entender, imagina o que tem DEZESSEIS possibilidades! Ora, é o mesmo padrão usado. Mas como, se eu só conheço 10 números, de 0 a 9? Há novos números que eu nunca vi? Na verdade não. Até o número 9, utilizamos os números normais, mas a partir do 9, completamos com letras, de A a F, completando 16 elementos. Assim, correlacionando com decimais, A16 = 1010, B16 = 1110, C16 = 1210, D16 = 1310, E16 = 1410, F16 = 1510 (lembrando que a contagem começa do zero). Como a principal unidade de medida do computador chega até 255, então é de se presumir que um conjunto de Fs (o valor máximo com um único algarismo em hexadecimal) dará este valor em decimal. Mas um conjunto de quantos Fs?
Em binários, chegamos ao valor de 256 elevando a base ao número de posições. Podemos fazer ao contrário para descobrir quantos hexadecimais darão 255 em decimal.

16x = 256
16 = x√256
O único número que ao tirar raiz de 256 dá resultado Inteiro é 2, portanto:
162 = 256

Então, um simples FF já resulta em 255, o máximo que um byte pode alcançar. Usamos os hexadecimais para configurações do computador, principalmente para cores. As cores, no computador, possuem uma codificação hexadecimal, e respeitam o padrão dos bytes. Geralmente, um computador possui 256 cores, para seguir o estabelecimento hexadecimal, mas, ao invés de umbyte, são usados três. Como se faz isto? Apenas utilizando três pares de hexadecimais, formando seis algarismos, que ajudam a compor as cores baseado na intensidade de cores fundamentais e que formam todas as cores que existem na tela do computador, televisão e qualquer monitor: Vermelho, Verde e Azul (padrão RGB, em inglês). A intensidade varia de 0 (00) a 255 (FF), podendo passar por quaisquer valores entre eles, exemplo: 0A, 9B, 75, BD, CC, etc... O padrão para definir que um número é hexadecimal é colocar uma hash (#) antes do número: #FF0000 (Vermelho), #FFFF00 (Amarelo), #00FFFF (Ciano), #FFAA00 (Laranja), #FFFFFF (Branco - mistura de todas as cores), #000000 (Preto - ausência de cor).

Copiado e colado de João Elias Arruda.

Muito obrigado.

Abraços