(Tutorial) Operador AND (&)
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:
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 c++:
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:
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:
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:
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:
printf("%b", 15); // 1111
Simples não é? Não é muito difícil, precisa ler bem e entender. Dúvidas? Poste um comentário aqui!
Tutorial Criado por Bruno da Silva