2.xx = Matemática Inicial...

2.1)Hexadecimal e Decimal...

Conte de 0 até 10... Agora me diga, quais os números que você utiliza?
TEMMPOO!! .......ACABOU!! Se você pensou : 0,1,2,3,4,5,6,7,8,9 E DEZ;
VOCÊ ERROU!! :D
Você deveria ter contado 0,1,2,3,4,5,6,7,8,9 e um ao lado
do zero porque é assim que se deve fazer, pelo bem da matemática dos seus
neurônios (dezenas, centenas, milhares, dez, cem, mil e outros nomes bonitos,
significam apenas um jeito de classificar na lingüagem portuguesa) :D... São
esses os números do sistema decimal \o/ !!! Sim, os números do grande sistema
decimal, que os seres humanos utilizam na vida real, são 10 : 0,1,2,3,4,5,6,7,8
e 9!! Tudo bem, você pegou a idéia... Agora, vamos falar sobre o hexadecimal...
Do grego (HEXA = seis) mais o sistema DECIMAL, ou seja, 10 + 6 = 16 \o/!!
Mas, se ele contém todos os números decimais, quais são os outros seis?
Simples, as letras A,B,C,D,E,F (lembrando, não importa se digitar A ou a, para
não confudir com expressão matemática, é utilizado um pequeno "h" ao lado do
último número ou um "0x" na frente :D). Bem, mas e como ele é organizado? Aí
vai : 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F!! Agora, lembre-se disso : 0xA=10 em
decimal e assim sucessivamente(x+1) até o 0xF=15... Isso é para que nunca
confunda o número de componentes (16) com o valor do último (15), a propósito :
0x10=16 em decimal... Bem, já dá para ir contando até o infinito ;D...

2.2)Hexadecimal e Binário...

Do grego BI(=Dois) mais nário (Seria numeração?)... Este sistema tem apenas
dois componentes que, são matematicamente representadas por 0 e 1 (note,
com isso, que dá para entender sua descendência não-matemática :D)... Bem,
caso você ainda não saiba, a parte física de uma máquina qualquer só entende
isso... Agora vamos ao hexadecimal e a origem de sua insistente existência :D!
Converter binário para decimal é fácil mas, o oposto não é muito interessante...
Aí vem a criação do hexadecimal e a sua utilização prática!! Por ser mais
compacto que o decimal e converter facilmente entre ele e binário :

DecimalBinárioHexadecimal
0 0000 0x0
1 0001 0x1
2 0010 0x2
3 0011 0x3
4 0100 0x4
5 0101 0x5
6 0110 0x6
7 0111 0x7
8 1000 0x8
9 1001 0x9
10 1010 0xA
11 1011 0xB
12 1100 0xC
13 1101 0xD
14 1110 0xE
15 1111 0xF

Lembretes : Números hexadecimais e binários, são vistos/lidos da direita para
a esquerda, caso não tenha percebido!!! E, para um computador, não importa
adicionar zeros (0) adiante do fator relevante, EM HEXADECIMAL!! O que eu quero
dizer é que ele lê 0xA e 0x0A DA MESMA FORMA! (CLARO QUE ESTOU MENCIONANDO NUMA
LIVRE INTERPRETAÇÃO, ou seja, leitura simples de dados, sem restrições
pré-definidas como o tamanho da memória ou nas instruções da máquina :P...)

2.3)BIT, BYTE, KILOBIT, KILOBYTE, MEGABIT, MEGABYTE,
GIGABIT, GIGABYTE, TERA...


Caso venha na sua cabeça, mais uma vez, vou afirmar que todas usam prefixos
gregos... Já o BIT (BInary digiT, alguém afirmou... Não achei convincente :P...),
esse é o menor valor que uma informação pode ter, nos computadores. O BIT
representa o sistema binário no mundo virtual : ele pode ter qüaisquer DOIS
valores (1 e carro, verde e inconstitucionalicimamente ; DOIS pares de valores
bem diferentes...) mas, APENAS DOIS!! Percebeu, na tabela acima, que eu sempre
coloquei quatro valores binários? Essa junção de quatro BITs se chama NIBBLE
(pedaço), pode não parecer muito importante mas, todo valor hexadecimal (não
importa se é o 0x0 que representa 0000) em um editor hexadecimal, representa um
NIBBLE!!! Agora, como o padrão do PC que usamos, tem uma maior afinidade
com o BYTE (2 NIBBLEs=8 BITs=1 BYTE), é muito comum ver dois valores hexadecimais
juntos, formando a representação de um BYTE. Pausa para colocar a cabeça em
função : 1 NIBBLE = 16 valores possíveis pois ---------------------------------
2 x 2 x 2 x 2 = 16 (2=valores possíveis de um BIT), 1 BYTE = 256 valores
possíveis pois 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 = 256 (ou, em hexadecimal, de 0x00
até 0xFF); isso, em matemática, se chama combinação, base para análise
combinatória... Mais uma coisa : 16 BITs também é chamado de WORD (palavra), 32
BITs é uma DWORD (palavra dupla) e assim sucessivamente :D...

Pronto, agora vai aí uma tabelinha :

BITsNIBBLEsBYTEsHEXA Valores Possíveis
8 BITs 2 NIBBLEs 1 BYTE 00h-FFh 256
16 BITs 4 NIBBLEs 2 BYTEs 0000h-FFFFh 65.536
32 BITs 8 NIBBLEs 4 BYTEs 00000000h-FFFFFFFFh 4.294.967.296

Algo que importa muito, quando você for mexer em qualquer coisa relacionada a
edição hexadecimal, é sempre considerar uma quantidade PAR pois, dificilmente
(pelo que eu mostrei aí você deve ter percebido) alguém vai criar algo em
valores ímpares (é uma conveniência de interesse matemático, se você ainda não
sabe)!

2.4)Organizando Bytes.

Agora, vamos colocar um pouco de matemática virtual aqui, para aprender
direitinho os próximos assuntos deste tópico... Vamos imaginar 1 BYTE - 0xA0 em
BITs :

|-|-|-|-|-|-|-|-| BIT 1=0 , BIT 2=0 , BIT 3=0 , BIT 4=0 , BIT 5=0 , BIT6=1
|1|2|3|4|5|6|7|8| BIT 7=0 , BIT 8=1 ; juntos, em binário : 10100000 .
|_|_|_|_|_|_|_|_|

O BIT 8 é chamado BIT de menor importância/ordem e o BIT 1 é o chamado BIT de
maior importância/ordem (simples assim) :D! Isso também é aplicado em cadeias
maiores da família (Nibbles de maior importância, BYTEs de menor
importância...)! Sempre o de menor importância é o primeiro que aparece, no
nosso jeito de ver o mundo (da esquerda para a direita), e o de maior
importância é o último !!! Aí você se pergunta : "Pra quê essa idiotice?", já
vou explicar :D!

2.41)Endianess - finalização dos BYTEs, na memória!!

Apesar de estar parecendo muito chato (e desnecessário para alguns), essas
minhas explicações são essenciais para que você aprenda a fazer a coisa certa...
Essencialmente, este assunto... Só existem duas organizações oficiais para os
seus queridos BYTEs (existem outras que eu vou explicar, se necessário) : o
método Intel (Little-endian), bem mais comum e usado pela maioria, e o método
Motorola (Big-endian), exatamente o oposto do Intel, mais usado para sistemas
orientais.

2.411)Método Intel, Baixa Finalização (Little-endian).

Hoho, você vai ver como é fácil... Pegamos um valor qualquer em hexadecimal...
0xAF089CD1 é o escolhido! Aí organizaremos ele na memória, com este método :
0x D1 9C 08 AF (separei pra você compreender melhor), entendeu? Vamos explicar :
o BYTE de menor importância vem primeiro ! O propósito disso? Simples, vai ficar
uma organização igüal como nós vemos o mundo (da esquerda para a direita), assim
facilita quando se quer criar aplicações de texto, por exemplo... Pois, os BYTEs
serão lidos do começo até o fim na memória :D...

2.412)Método Motorola, Alta Finalização (Big-endian).

Como eu havia dito, é exatamente o contrário do método Intel... Vamos pegar
aquele exemplo (0xAF089CD1) acima e organizar aqui : 0x AF 08 9C D1, mudou nada,
não é mesmo? Continua aquela organização esquisita para nosso jeito de ver o
mundo :D... Já para os asiáticos e árabes, isso é uma maravilha pois, eles vêem
o mundo assim (da direita para a esquerda :D) e isso vai facilitar na hora
de utilizar programas, mais uma vez, graças à leitura da memória :D...

2.413)Método de Troca de Bytes - Byte Swap (...).

É o utilizado no Nintendo 64.. (Breve, quando eu explorar os documentos em
busca de mais informações!)

2.414)Método não mais usado, Média Finalização (Middle-endian).

Mais uma vez, vamos mostrar nosso exemplo (0xAF089CD1) aqui : 0x 9C D1 AF 08,
entendeu a moral? Vou explicar : ele inverte o grupo de BYTEs de menor
importância com o de maior... Ou, simplesmente, divide ao meio os BYTEs e
troca a metade do começo pela metade do fim :D... Já não é mais usado mas,
sempre bom ter um conhecimento disso!

2.5)Tabela/sistema de caracteres e codificação!

Como havia explicado na introdução, os jogos podem ter tabelas/sistemas de
caracteres diferentes entre si, até na mesma máquina! Agora, o quê seria esse
sistema? É simples, o Sistema Operacional precisa definir códigos para a
entrada/saída de dados... Logo, alguns "gênios" resolveram definir, de acordo
com o número de teclas (e pela pobre imaginação dos americanos que fizeram
isso), sistemas básicos de entrada/saída de dados para o PC. O primeiro BIOS foi
americano e só admitia a saída de caracteres de 1 BYTE (0x00-0xFF), o ASCII da
IBM foi escolhido para ser o sistema. Mais aí, o mundo foi globalizado... Logo,
a IBM e seu ASCII estavam ultrapassados e o Software passou por cima do
Hardware! Uma empresa "querida", chamada M$, resolveu codificar seu sistema para
todos os padrões mundiais possíveis :D! Assim nasceu esse método de codificação
que é utilizado no WORD, nas páginas da internet, no seu Sistema Operacional!!
Traduzindo as chamadas em ASCII do BIOS, agora inúteis, para diferentes
codificações possíveis! Alguns pontos necessários a entender, para que não haja
dúvidas : esse negociozinho de criar um sistema era uma forma de tomar o
controle do modo de produção dos PCs! Hoje, tudo é anarquia, e (até para a
melhora da segurança, graças à M$, Apple e GNU) não é o BIOS que definirá
operação x ou y no seu sistema! O ASCII funciona, no seu PC, em modo Hardware!!

2.51)O American Standard Code for Information Interchange =
Código Básico Americano para Troca Internacional de Informações!!


Ele é quem dita os 128 primeiros caracteres (0x00-0x7F) na entrada (teclado)
de TODOS os BIOS americanos. Bom, vamos à sua organização : os 32 primeiros
caracteres (0x00-0x1F) são usados para controlar o Sistema Operacional (Caps
Lock, TAB, ENTER, BACK Space mas não o espaço :D); mais 32 (0x20-0x3F) para
pontuações e a numeração (agora sim, os números e o espaço :D); mais 32
(0x40-0x5F) para os caracteres em CAIXA ALTA (A,B,C,D,E,F,G,H...) e alguns
especiais; e mais 32 (0x60-0x7F) para os caracteres pequenos (a,b,c...), cinco
símbolos estúpidos e o DELETE no final!! Oras, mas se o ASCII só define 128 dos
256 BYTEs possíveis, o quê acontece com os outros 128? Simples, esses ficariam
por conta do Sistema Operacional... Ficariam porque, como já foi dito, não é o
BIOS que vai ditar isso :D...



Este é o ASCII.

2.511)ANSI (American National Standard ISO).

O windows tem seu sistema bacana de codificação... O sistema original e básico
do mesmo é o ANSI :D! Podemos dizer que a codificação WIN-000 é o ANSI! Certo,
nem tudo é festival :D!! O ANSI é limitado como o ASCII : só utiliza 1 BYTE por
caractere. A sua organização (aliás a única que eu vou poder colocar aqui :D)
é : os 128 primeiros caracteres como o ASCII + alguns caracteres para a
utilização internacional (para os americanos)... A tabela completa, está inclusa
com esse documento ou com o Thingy 32 (eu tirei do Thingy 32 :D)...

2.52)Unicode.

O Código Único contêm o maior número de caracteres já organizados neste
planeta : TODOS! Criado inicialmente na Califórnia (EUA), ele foi se expandindo
e hoje já tem versões, das quais, existe a principal e mais completa de todos,
abrangendo 4 BYTEs por caractere :/ ... Esta já finalizou todos os caracteres
encontrados na face deste planeta!! Ela apenas sofre modificações quando são
encontradas novidades sobre as lingüagens antigas...

2.53)Shift-JIS (JIS=Japanese Industrial Standard) e BIG5.

Mais um sistema criado pela M$ para o óbvio nipônico :D... O Shift-JIS é uma
versão global do até então JIS, voltada para relações exteriores... Utilizando
2 BYTEs por caractere, contêm todos os kanjis utilizados pelos japoneses, mais
caracteres gregos e latinos (e seus descendentes) e alguns símbolos... O BIG5,
sistema chinês dessa vez :D, foi criado pelo Instituto da Informação de Taiwan.
Adotado nos tempos de DOS, ele ficou mais popular que qualquer outro sistema
chinês... Ele utiliza os caracteres do chinês tradicional, 2 BYTEs são usados
por caractere e ganhou uma extensão feita pelo governo de Hong Kong! Ahh, se
chama BIG5 porque BIG=grande em inglês :P... PARA SABER A TABELA DO SHIFT-JIS,
PEGUE O JWPCE E VÁ NA OPÇÃO DE ADICIONAR CARACTERES!! Lá tem os valores dos
caracteres para o Shift-JIS!

2.54)Extended Unix Coding - (EUC).

Codificação UNIX Extendida. Como se pode entender, foi gerada no ambiente
UNIX! Não abrange milhares de idiomas, apenas os Tigres Asiáticos : Coréia (as
duas), China e Japão. É muito usada nos sistemas UNIX orientais, em redes locais
(sem acesso internético)! A codificação é variável, podendo ter 1 ou 2 BYTEs por
caractere, apenas :D. Não confundir com o famoso dicionário japonês EDICT!

2.55)Extended Binary Coded Decimal Interchange Code (EBCDIC).

Erm, Decimal Codificado em Binário Extendido para Código de Troca Internacional.
Que lindo... É simples : esse sistema usa 1 BYTE por caractere (2 BYTEs nas suas
versões orientais) e, seu modelo robusto, se dá por ser diferenciado a partir da
divisão do BYTE usado, caracterizando a zona (país) com os 4 primeiros BITs e
identificando o caractere com os outros 4 BITs! Parece uma coisa do outro mundo
mas, é o sistema mais antigo que ainda é usado e o segundo criado :D. Foi feito
pela IBM para os seus super-mainframes e é o predecessor do ASCII! Desenvolvido
em 1964 (4 anos antes do ASCII). AHH, não confunda com o famoso dicionário
japonês EDICT :D!

2.5x)Conclusão...

Preste bem atenção nesses sistemas que eu pûs, ele são os mais populares e
existem jogos que os utilizam!! Pra saber a tabela completa deles, contudo, só
pesquisando na NET porque eu não tenho elas x.x !!!

----------------------------------------------------------------------------------------------------------