[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


Messages In This Thread
Operador & - by ipsBruno - 21.06.2012, 02:20
Re: Operador & - by ipsBruno - 21.06.2012, 02:22
Re: Operador & - by Jason` - 21.06.2012, 02:23
Re: Operador & - by Dolby - 21.06.2012, 02:24
Re: Operador & - by Ades - 21.06.2012, 02:26
Re: Operador & - by cJMaster_ - 21.06.2012, 02:31
Re: Operador & - by ipsBruno - 21.06.2012, 02:35
Re: Operador & - by Juninho_Oakley - 21.06.2012, 02:40
Re: Operador & - by cJMaster_ - 21.06.2012, 02:41
Re: Operador & - by ipsBruno - 21.06.2012, 02:43

Forum Jump:


Users browsing this thread: 1 Guest(s)