+3

Utilizando Operadores Bit a Bit com o PHP e Javascript

criado por Marcos Regis em 23/05/2011 8:32pm
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.




Comentários:

Mostrando 1 - 6 de 6 comentários
Dangda disse:
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 (~3 anos atrás)

Marcos Regis disse:
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 (~4 anos atrás)

Ítalo disse:
Parabésn pelo post, Marcos. ²

Estou louco para saber a utilidade com exemplos práticos.

Até mais.
31/08/2012 10:03pm (~4 anos atrás)

Parabéns pelo post Marcos, boas observações!
25/02/2012 4:38pm (~4 anos atrás)

Marcos Regis disse:
Lucas, tem sim muita utilidade. Estou preparando o complemento do post com um exemplo bem útil.
03/02/2012 10:35am (~4 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.
29/01/2012 7:09am (~4 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)