[Tutorial] Binбrios & Hexadecimal
#1

Binбrios & Hexadecimal
Boas pessoal, hoje vou fazer um tutorial sobre binбrios e hexadecimal, й uma das coisas fundamentais e interessantes na programaзгo.

Primeiro irei explicar o que sгo binбrios, bem binбrio й um sistema base-2, isso significa que podemos representar qualquer nъmero do nosso base-10 (chamado de sistema decimal - "dec" significa 10) usando apenas 2 dнgitos - 1 e 0 - em vбrias combinaзхes.
Para o computador nгo й simplesmente 1 e 0, eles sгo impulsos elйctricos , on state (1) e off state (0) , digamos que й como um switch ou um interruptor de luz, visto que vocк quando desliga nгo hб passagem de corrente elйctrica e quando liga tem passagem de corrente elйctrica, dessa forma tudo o que existe num computador, seja letras, imagens, sites, jogos, й composto por binбrios, dessa forma um binбrio 1 ou um binбrio 0 й chamado de bit (abreviaзгo de binary digit) , por exemplo 4 bits ( 1010 ) й chamado de nibble que pode ter valores entre 0 e 15 (16 valores distintos) , agora outro exemplo, 8 bits (10101110) й chamado de 1 byte que pode ter valores entre 0 e 255, dessa forma 1 byte dб para representar qualquer carбcter que existe na tabela ASCII que tem valores de 0 a 255.

Como calcular nъmeros binбrios

Vamos comeзar com um nibble (4 bits) para calcularmos.

Exemplo: 1011

8421
1011
Agora a questгo й como й que й determinado esses valores de ( 1, 2, 4, 8 ) , caso ainda nгo tenha entendido esses valores sгo mъltiplos de 2.

8421resultado
3210potкncia
Agora para confirmar vocк pega em uma calculadora e faz o seguinte calculo 2 ^ 0 , vai reparar que o resultado й 1, agora faзa 2^1 , 2^2 e 2^3 , vocк vai confirmar que os respectivos resultados sгo: 2 , 4 e 8.
Agora eu vou ensinar uma forma para nгo esquecer e nгo precisar de fazer esse 2 elevado a (...)
Vocк jб reparou que quando tem um sistema operativo 64-bits o inferior й 32-bits, logo a seguir serб 16 e depois 8 , 4 , 2 e por fim 1. Entгo jб reparou que isto й tudo uma sequкncia de x + x , 8 + 8 й 16 , logo 16 + 16 й 32. Eu sei que isto parece complicado, mas eu vou mostrar a minha conta de cabeзa atй aos 2048, entгo veja:
1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048. Entгo й sу decorar.
Voltando ao nosso calculo:

8421
1011
Vamos proceder ao calculo, para determinar o valor do nosso binбrio basta somar os valor que estгo por cima, lembrando que o 1 й on e o 0 й off, logo vocк nunca irб somar o valor que corresponde ao 0, entгo serб: 8+2+1 = 11
Sabemos que este nibble tem um valor decimal de 11. Vamos ver outro exemplo: (8 bits - 1 byte)

128643216 8421
1001 1011
Lembre-se que deve cortar todos os zeros, entгo ficarб. 128+16+8+2+1 = 155 , entгo sabemos que o nosso binбrio terб um valor decimal de 155.

Bem entгo sobre os binбrios й sу isto, mas como eu gosto de binбrios irei mostrar outro exemplo, este exemplo й para determinar o nosso ano, neste caso 2013.

20481024512256 128643216 8421
0111 1101 1101
Dessa forma ficarб: 1024+512+256+128+64+16+8+4+1 = 2013 , bem como pode ver й bastante simples, agora vamos falar dos Hexadecimal.

Hexadecimal

Provavelmente todos nуs jб vimos Hexadecimal, principalmente no em html ou aqui no sa-mp, todos nos jб vimos algo como isto #A09CF3 ou isto 0xA09CF3, o Hexadecimal й um sistema base-16 (hex = 6 , dec = 10) , isto й bastante diferente do sistema base-2 ou base-10, isto significa que temos dнgitos de 0 a 15, porйm como nos sabemos os nъmeros decimais sу vгo de 0 a 9, entгo para representar o 10 a 15 й necessбrio sнmbolos.

DECIMAL0123456789101112131415
HEXADECIMAL0123456789ABCDEF
Para calcular valores Hexadecimal й bastante parecido ao decimal, por exemplo, em decimal para obtermos o valor 235 fazemos.

2*100 + 3*10 + 5 ou 200 + 30 + 5

Outro valor 1236:

1 * 1000 + 2 * 100 + 3 * 10 + 6 ou 1000 + 200 + 30 + 6

O Hexadecimal й parecido, sу que em vez de usarmos como no decimal 10 elevado a (...) no Hexadecimal usamos 16 elevado a (...) , isto tem a sua lуgica.

Entгo vamos calcular o seguinte exemplo. 0xA0FF ou #A0FF , lembre-se que o 0x e o # sгo identificadores.

4096 (16^3)256 (16^2)16 (16^1)1 (16^0)
A0FF
Sabemos que o A tem valor de 10 e F tem valor de 15, logo ficarб assim.

4096 (16^3)256 (16^2)16 (16^1)1 (16^0)
1001515
Entгo para calcularmos o valor do nosso Hexadecimal teremos de fazer o seguinte:
10 vezes 4096 , 0 vezes 256 , 15 vezes 16 e 15 vezes 1 , logo ficarб: 10*4096 + 0 * 256 + 15 * 16 + 1 * 15 = 41215.

Outro exemplo: 0xB9

161
B9
Sabemos que B tem valor de 11, logo ficarб:

161
119
Entгo serб: 11 * 16 + 9 * 1 = 185

Agora iremos aumentar o tamanho, vamos usar o seguinte valor Hexadecimal 0xA09CF3.

16^516^416^316^216^116^0
A09CF3
Convertendo os valores de potкncias:

1048576655364096256161
A09CF3
Entгo agora iremos converter o A, C e F.

1048576655364096256161
100912153
Entгo ficarб: 10 * 104857 + 0 * 65536 + 9 * 4096 + 12 * 256 + 15 * 16 + 3 * 1 = 1088749.

Como pode ver isto й um valor muito grande, mas imaginamos que vocк no seu gamemode queria colocar um valor que serб grande, entгo para isso usamos os valores Hexadecimal, para encurtarmos o tamanho da escrita que facilita bastante.

Converter Binбrios para Hexadecimal

Para converter binбrios para Hexadecimal й bastante fбcil, vejamos o exemplo com o binбrio: #10111101
Nota: Usei # no binбrio para nгo se confundir com decimal.

128643216 8421
1011 1101
Fazendo as contas serб, 128+32+16+8+4+1 = 189 , entгo para converter faremos o seguinte:

8421 8421
1011 1101
Caso tenha reparado nуs tiramos os seguintes valores, 128, 64, 32 e 16 e substituнmos por 8,4,2,1.

Para converter para Hexadecimal nуs separamos os 4 bits esquerdos dos 4 bits direito, ficarб assim:

4 bits esquerda1011= 8 + 2 + 1= 11= 0xB
4 bits direita1101= 8 + 4 + 1= 13= 0xD
Dessa forma 11 decimal = 0xB e 13 decimal = 0xD a conversгo final do binбrio: #10111101 й 0xBD

Entгo й isto, espero que o tutorial tenha sido ъtil.

Crйditos:
  • BlueX - criador do tutorial
  • Stewie` (steki) - longas conversas
  • John Selvia - criador de um pdf sobre binбrios e hexadecimal
  • Funeral - conversas de binбrios
  • ipsBruno - conversas produtivas
Reply
#2

Boa, bem explicado, precisava saber algumas coisas sobre isto
Reply
#3

Esqueceu de falar sobre representaзгo de nъmeros negativos e armazenamento de floats.

Уtimo tutorial, se bem que nгo tem muito uso dele no PAWN, alйm dos bits...
Reply
#4

Quote:
Originally Posted by .FuneraL.
Посмотреть сообщение
Boa, bem explicado, precisava saber algumas coisas sobre isto
Obrigado Funeral

Quote:
Originally Posted by Lуs
Посмотреть сообщение
Esqueceu de falar sobre representaзгo de nъmeros negativos e armazenamento de floats.

Уtimo tutorial, se bem que nгo tem muito uso dele no PAWN, alйm dos bits...
Sim Lуs, apesar de ainda nгo saber sobre os nъmeros negativos e armazenamento de floats, achei que nгo valeria muito a pena estar a explicar tudo isso.

Obrigado
Reply
#5

Nгo li, mas se for como eu tiver pensando, parabйns !

Minha primeira prova de sistemas foi assim, depois a gente jб foi desenvolver pras protoboards, й emocionante.



Quote:
Originally Posted by Lуs
Посмотреть сообщение
Esqueceu de falar sobre representaзгo de nъmeros negativos e armazenamento de floats.

Уtimo tutorial, se bem que nгo tem muito uso dele no PAWN, alйm dos bits...
Sу que ai ele teria que explicar todos os sistemas, porque sу um seria ruim.

C1, C2 e MS
Reply
#6

Quote:
Originally Posted by Willian_Luigi
Посмотреть сообщение
Sу que ai ele teria que explicar todos os sistemas, porque sу um seria ruim.

C1, C2 e MS
Sim, mas essa seria a intenзгo, eu acho o complemento de 2 mais fбcil para ser explicado.
Reply
#7

Quote:
Originally Posted by Lуs
Посмотреть сообщение
Sim, mas essa seria a intenзгo, eu acho o complemento de 2 mais fбcil para ser explicado.
o MS e o C1 sгo mais simples e fбceis de explicar, cara.

(MS) sу muda o ultimo bit (0) - positivo (1) - negativo
(C1) muda o ultimo bit e inverte a sequкncia lуgica, oque й (0) vira (1) e oque й (1) vira (0)...

O C2 tu ainda tem que somar com 1 depois.
Reply
#8

Quote:
Originally Posted by Willian_Luigi
Посмотреть сообщение
o MS e o C1 sгo mais simples e fбceis de explicar, cara.

(MS) sу muda o ultimo bit (0) - positivo (1) - negativo
(C1) muda o ultimo bit e inverte a sequкncia lуgica, oque й (0) vira (1) e oque й (1) vira (0)...

O C2 tu ainda tem que somar com 1 depois.
Eu acho o complemento de 2 bem mais fбcil, apenas minha opiniгo. Eu sei como eles funcionam.
Reply
#9

Quote:
Originally Posted by Lуs
Посмотреть сообщение
Eu acho o complemento de 2 bem mais fбcil, apenas minha opiniгo. Eu sei como eles funcionam.
Eu sei que vocк sabe, aheuhaeu, mas deixa ai que quem olhar tambйm jб vai entendendo melhor...

5bjs
Reply
#10

Extremamente ъtil, embora nгo seja muito utilizado em Pawn, bom trabalho
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)