Utilizando Operadores Bit a Bit com o PHP e Javascript
O que é?
Os operadores bit-a-bit ativam ou desativam bits específicos dentro de um inteiro. Ele também pode ser usando com strings, mas nesse caso esses operadores irão trabalhar nos valores ASCII dos caracteres.
Um pouco de matemática e lógica
Todos nós sabemos (ou deveríamos saber) que os caracteres ASCII são todos formados com 1(um) byte que é o mesmo que 8 bits e que bit só pode ter 2 (dois) valores, sendo eles zero e um.
Veja agora a tabela dos números de 0 a 16 como são em sua representação binária
0 = 0 0 0 0 0 0 0 0
1 = 0 0 0 0 0 0 0 1
2 = 0 0 0 0 0 0 1 0
3 = 0 0 0 0 0 0 1 1
4 = 0 0 0 0 0 1 0 0
5 = 0 0 0 0 0 1 0 1
6 = 0 0 0 0 0 1 1 0
7 = 0 0 0 0 0 1 1 1
8 = 0 0 0 0 1 0 0 0
9 = 0 0 0 0 1 0 0 1
10= 0 0 0 0 1 0 1 0
11= 0 0 0 0 1 0 1 1
12= 0 0 0 0 1 1 0 0
13= 0 0 0 0 1 1 0 1
14= 0 0 0 0 1 1 1 0
15= 0 0 0 0 1 1 1 1
16= 0 0 0 1 0 0 0 0
Repare nos numeros 2,4,8 e 16. Cada um está 1 bit deslocado a esquerda de seu antecessor (10, 100, 1000).
Isso é uma característica dos números que são potência de 2.
2^1=10, 2^2=100, 2^3=1000, 2^4=10000
E como seria, sem olhar em tabela alguma, 2^6 ??
Para responder com rapidez a isso basta ver que a potência é igual ao número zeros a direita ou dizendo de forma mais correta conceitualmente, de posições do deslocamento para a esquerda.
2^6 = 1000000 (1 seguido de 6 zeros ou 1 bit ativo deslocado 6 posições a esquerda) que é igual a 64
Outra coisa que podemos reparar é que o todo número que possui o último bit ativo é um número ímpar (Está aí uma forma bem simples de saber se um número é par ou ímpar, mesmo de números grandes a um custo baixo).
Note também que sempre que há deslocamento em um bit a esquerda dobramos o valor.
Ex.:
3 = 0 0 0 0 0 0 1 1
deslocando-se 1 bit para a esquerda teremos
0 0 0 0 0 1 1 0 que é igual a 6.
O mesmo pode ser visto em 5 e 10, 6 e 12 e em 7 e 14.
Os operadores bit-a-bit ativam ou desativam bits específicos dentro de um inteiro. Ele também pode ser usando com strings, mas nesse caso esses operadores irão trabalhar nos valores ASCII dos caracteres.
Um pouco de matemática e lógica
Todos nós sabemos (ou deveríamos saber) que os caracteres ASCII são todos formados com 1(um) byte que é o mesmo que 8 bits e que bit só pode ter 2 (dois) valores, sendo eles zero e um.
Veja agora a tabela dos números de 0 a 16 como são em sua representação binária
0 = 0 0 0 0 0 0 0 0
1 = 0 0 0 0 0 0 0 1
2 = 0 0 0 0 0 0 1 0
3 = 0 0 0 0 0 0 1 1
4 = 0 0 0 0 0 1 0 0
5 = 0 0 0 0 0 1 0 1
6 = 0 0 0 0 0 1 1 0
7 = 0 0 0 0 0 1 1 1
8 = 0 0 0 0 1 0 0 0
9 = 0 0 0 0 1 0 0 1
10= 0 0 0 0 1 0 1 0
11= 0 0 0 0 1 0 1 1
12= 0 0 0 0 1 1 0 0
13= 0 0 0 0 1 1 0 1
14= 0 0 0 0 1 1 1 0
15= 0 0 0 0 1 1 1 1
16= 0 0 0 1 0 0 0 0
Repare nos numeros 2,4,8 e 16. Cada um está 1 bit deslocado a esquerda de seu antecessor (10, 100, 1000).
Isso é uma característica dos números que são potência de 2.
2^1=10, 2^2=100, 2^3=1000, 2^4=10000
E como seria, sem olhar em tabela alguma, 2^6 ??
Para responder com rapidez a isso basta ver que a potência é igual ao número zeros a direita ou dizendo de forma mais correta conceitualmente, de posições do deslocamento para a esquerda.
2^6 = 1000000 (1 seguido de 6 zeros ou 1 bit ativo deslocado 6 posições a esquerda) que é igual a 64
Outra coisa que podemos reparar é que o todo número que possui o último bit ativo é um número ímpar (Está aí uma forma bem simples de saber se um número é par ou ímpar, mesmo de números grandes a um custo baixo).
Note também que sempre que há deslocamento em um bit a esquerda dobramos o valor.
Ex.:
3 = 0 0 0 0 0 0 1 1
deslocando-se 1 bit para a esquerda teremos
0 0 0 0 0 1 1 0 que é igual a 6.
O mesmo pode ser visto em 5 e 10, 6 e 12 e em 7 e 14.
Páginas:
1
2
Parabéns pelo artigo excelente http://conteudodigitalonline.com.br/
10/03/2018 9:37am
(~6 anos atrás)
Outra coisa que podemos reparar é que o todo número que possui o último bit ativo é um número ímpar (Está aí uma forma bem simples de saber se um número é par ou ímpar <a href="http://vienne.co/vi-nu" rel="dofollow">vi nu</a>, mesmo de números grandes a um custo baixo).
24/01/2013 7:20pm
(~12 anos atrás)
Eu já escrevi a segunda parte do artigo. Falta apenas revisar e passar pela moderação. Deve estar disponível ainda este mês.
03/09/2012 5:51pm
(~12 anos atrás)
Parabésn pelo post, Marcos. ²
Estou louco para saber a utilidade com exemplos práticos.
Até mais.
Estou louco para saber a utilidade com exemplos práticos.
Até mais.
31/08/2012 10:03pm
(~12 anos atrás)
Lucas, tem sim muita utilidade. Estou preparando o complemento do post com um exemplo bem útil.
03/02/2012 10:35am
(~13 anos atrás)
Marcos, acho meio difícil usar isso no dia a dia, você poderia me falar onde eu poderia estar empregando os operadores bit?
Parabéns pelo artigo.
Parabéns pelo artigo.
29/01/2012 7:09am
(~13 anos atrás)
exemplo o usuario pode: postar, editar , deletar
se utilizar o bitwise voce pode setar ele como, postar e deletar
ou somente pode editar
ou libera todos
coisas do genero