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:
http://pt.wikipedia.org/wiki/Tabela_verdade
Aqui outras regras:
http://pt.wikipedia.org/wiki/Porta_l%C3%B3gica
Em pawn:
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:
Simples. O operador pega os valores de entrada e os transforma em binários:
Conversão para Binários:
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:
Comparar bit a bit:
Retornou 0001! Sim, 9 é impar.
-
-
-
Outro exemplo:
(12 & 1)
Transformar em binário:
Comparar bit a bit:
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:
Simples não é? Não é muito difícil, precisa ler bem e entender. Dúvidas? Poste aqui!
Tutorial Criado por Bruno da Silva
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:
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 verdadeA B (A & B)
0 0 0
0 1 0
1 0 0
1 1 1
http://pt.wikipedia.org/wiki/Tabela_verdade
Aqui outras regras:
http://pt.wikipedia.org/wiki/Porta_l%C3%B3gica
Em pawn:
- Código:
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:
- Código:
printf("%d", 10 & 15); // ??
Simples. O operador pega os valores de entrada e os transforma em binários:
Conversão para Binários:
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:
9 -> 1001
1 -> 0001
Comparar bit a bit:
- Código:
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:
12 -> 1100
1 -> 0001
Comparar bit a bit:
- Código:
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:
- Código:
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
Última edição por [iPs]BrunoSilva em Dom Ago 05, 2012 8:51 am, editado 1 vez(es)