[Tutorial] Operador &
#1

Bem. Primeiramente olб a todos.

Hoje irei ensinar um tutorial que jб me pediram algumas vezes, mas nunca tive vontade de fazer. Finalmente vou explicar como funciona os famosos operadores bit a bit, ou operadores estruturados em portas lуgicas.

Primeiramente vocк deve saber que estes operadores usam instruзхes baseadas nas instruзхes booleanas. Mentirosas e Verdadeiras. Falses e Trues. 0 e 1


Vamos aos operadores:

Operador AND

Primeiramente vocк precisa gravar as seguintes regras:
Quote:

A B (A & B)
0 0 0
0 1 0
1 0 0
1 1 1

Essas regras mudam de operador para operador. Mas basicamente operadores binбrios tem a mesma funзгo o que muda й a regra acima. A regra acima chama-se tabela verdade
http://pt.wikipedia.org/wiki/Tabela_verdade

Aqui outras regras:
http://pt.wikipedia.org/wiki/Porta_l%C3%B3gica

Em pawn:
pawn Код:
printf("%d", 0 & 0); // 0
printf("%d", 0 & 1); // 0
printf("%d", 1 & 0); // 0
printf("%d", 1 & 1); // 1
Resumindo a regra: Valores diferentes retorna falso. Valores que contenham zero em um dos parametros, retorna false. (Isto й, sу 1 & 1 pode retornar verdadeiro)

Pois bem, jб sabemos uma parte do operador &. Mas vem outra questгo.

Quando os nъmeros usados como parвmetros sгo diferentes de 1 e 0? Como 10 & 15

Como:
pawn Код:
printf("%d", 10 & 15); // ??
Simples. O operador pega os valores de entrada e os transforma em binбrios:

Conversгo para Binбrios:
Quote:

10 -> 1010
15 -> 1111

Entгo usamos os prуprio nъmeros binбrios para checagem BIT a BIT dos valores (algarismo por algarismo | digito por digito do nъmero binбrio)

(10) (15)
1 1
0 1
1 1
0 1

Agora sу aplicar as regra da tabela

1 & 1? 1
0 & 1? 0
1 & 1? 1
0 & 1? 0

Resultado:
1010

Agora por ъltimo a funзгo transforma o nъmero binбrio 1010 em decimal. Ficando 10

Logo 10 & 15 = 10

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

Pra que serve?

Para manipular os valores usando lуgicas complexas. Exemplo

Saber se um nъmero й Impar:

Para saber se um nъmero й impar usando este operador basta usar (n & 1) sendo "n" o nъmero a saber:

Ex:
9 & 1


Transformar em binбrio:
Quote:

9 -> 1001
1 -> 0001

Comparar bit a bit:
pawn Код:
1 & 0 =  0
0 & 0 =  0
0 & 0 =  0
1 & 1 =  1
Retornou 0001! Sim, 9 й impar.

-
-
-

Outro exemplo:
(12 & 1)



Transformar em binбrio:
Quote:

12 -> 1100
1 -> 0001

Comparar bit a bit:
pawn Код:
1 & 0 =  0
1 & 0 =  0
0 & 0 =  0
0 & 1 =  0
Retornou 0000 !! Nгo, 12 nгo й impar.

-
-

Entenderam?
_

** Importante - Dica
Para saber o valor binбrio de um nъmero basta fazer:

printf("%b", VALOR);

Ex:
pawn Код:
printf("%b", 15); // 1111

Simples nгo й? Nгo й muito difнcil, precisa ler bem e entender. Dъvidas? Poste aqui!

Tutorial Criado por Bruno da Silva
Reply
#2

Todos operadores bit-a-bit sгo iguais, o que muda sу й a regrinha que eu postei lб encima.

Por exemplo (1 | 1) A regra jб torna outra. Pesquisem na internet "PORTAS LУGICAS" pois lб, vocкs pode encontrar a regra de todos operadores baseados em portas lуgicas enquanto outro tutorial nгo estiver pronto

http://pt.wikipedia.org/wiki/Porta_l%C3%B3gica

Enfim. Espero que tenham gostado.
Reply
#3

Obrigado Bruno, serб de grande ajuda para mim e para muitos acredito eu.

+rep
Reply
#4

Nossa cara,valeu,sempre tive duvidas em relaзгo a isto,mais com este tutorial vocк conseguiu esclarecer as duvidas que ainda tinha...
Reply
#5

Que lixo quer levar um

/zoa

Gostei muito obrigado estava atras disso
Reply
#6

Drakins, уtimo projeto me ajudarб muito!
e ajudarб tabem outras pessoas como disse o Pedro.
Reply
#7

Tуpico atualizado. Vejam
Reply
#8

Belo trabalho drak apesar de eu nгo entender muito bem esses codigos...
Reply
#9

Sim , Obrigado por esclarecer ^^' Thanks!
Reply
#10

Quote:
Originally Posted by Juninho_Oakley
Посмотреть сообщение
Belo trabalho drak apesar de eu nгo entender muito bem esses codigos...
Com este tutorial entenderб! Mas vai ter que ler bem
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)