Escovando bits em PHP: operações bitwise e uma função debug
Dica publicada em PHP / Avançado
Escovando bits em PHP: operações bitwise e uma função debug
As operações bitwise não são muito comuns de serem vistas por aí, poucos programadores as conhecem. Mas são extremamente poderosas devido à sua velocidade de execução.
Pra melhor explicá-las, imagine uma situação onde você tem uma série de chaves liga-desliga para, por exemplo, armazenar opções de um determinado objeto, que possuam valores verdadeiro ou falso. Poderíamos criar uma convenção sobre uma sequência de zeros e uns, onde cada posição teria um significado, por exemplo:
00000
Respectivamente, da direita pra esquerda, para as opções 1, 2, 3, 4 e 5. Portanto, se quiséssemos que somente a opção 2 estivesse ligada, com valor verdadeiro, teríamos:
00010
Bem simples, não? O que já vi fazerem é armazenar esta string no banco de dados. Tendo-se, por exemplo, 54 opções, teríamos uma string de 54 caracteres. Imagine o algoritmo pra testar isto, transformando a string em um array e lendo o elemento número 'N' para saber se a opção está ligada ou não, fora a alocação desnecessária de memória. Apesar de parecer lógico, é ineficiente, existe maneira melhor.
Veja o artigo completo em:
http://merlone.ath.cx/2007/08/08/escovando-bits-em-php-operacoes-bitwise/
Pra melhor explicá-las, imagine uma situação onde você tem uma série de chaves liga-desliga para, por exemplo, armazenar opções de um determinado objeto, que possuam valores verdadeiro ou falso. Poderíamos criar uma convenção sobre uma sequência de zeros e uns, onde cada posição teria um significado, por exemplo:
00000
Respectivamente, da direita pra esquerda, para as opções 1, 2, 3, 4 e 5. Portanto, se quiséssemos que somente a opção 2 estivesse ligada, com valor verdadeiro, teríamos:
00010
Bem simples, não? O que já vi fazerem é armazenar esta string no banco de dados. Tendo-se, por exemplo, 54 opções, teríamos uma string de 54 caracteres. Imagine o algoritmo pra testar isto, transformando a string em um array e lendo o elemento número 'N' para saber se a opção está ligada ou não, fora a alocação desnecessária de memória. Apesar de parecer lógico, é ineficiente, existe maneira melhor.
Veja o artigo completo em:
http://merlone.ath.cx/2007/08/08/escovando-bits-em-php-operacoes-bitwise/