Publicidade   
 você está aqui: phpbrasil.com    artigos    artigo  
 
:: novos artigos ::

:: recomendado ::

PHP para a World Wide Web

Compre esse livro no Submarino.com.br

:: publicidade ::


:: novos scripts ::

:: elenco phpbrasil ::

Juan Roldán Esse usuário pertence aos 50 usuários mais ativos do site
Pontos: 4687

Visite a página de perfil de Alisson Carlos de F. RodriguesEsmiuçando operadores bit-a-bit - Parte 2
por Alisson Carlos de F. Rodrigues
Lista de Categorias  |  Contribua um Novo Artigo  |  Entre em Contato Conosco

Na segunda parte de artigos sobre operadores bit-a-bit, irei abordar um outro lado desses operadores: caracteres. No primeiro artigo o foco foi “números”, apresentando a maneira como os operadores bit-a-bit lidam com eles. No caso de caracteres eles funcionam de uma maneira um pouco diferente, e é exatamente dessas diferenças que trato nesse novo artigo.
Vote aqui!
Média de Votos Atual: 5.00
Total de Votos: 12
Nota:   

Continuação do artigo: http://www.phpbrasil.com/articles/article.php/id/1392

Como dito no artigo anterior, os operadores bit-a-bit tratam diretamente bits, que são os 0s e 1s lidos pelo processador.
Acredito que qualquer um que esteja lendo esse artigo, e que tenha uma noção básica teórica sobre como funcionam as coisas dentro de um computador, sabe que normalmente (não mais definitivamente) é usado caracteres seguindo a tabela ASCII (Unicode é história pra outro artigo), que são exatamente 255 caracteres que servem pra representar a escrita padrão Ocidental com mais alguns caracteres especiais e ponto.
A cada um desses caracteres é designado ou atribuído um número que vai de 0 (NULL) à 255, 11111111 em binário ou FF em hexadecimal (vazio). Se você leu o artigo anterior (e eu recomendo pra entender este), então deve lembrar que em cores RGB também é usado algo parecido.

http://img329.imageshack.us/img329/6633/asciipq9.gif

Aí em cima está a tabela ASCII com todos os seus 255 caracteres.
Indo direto aos exemplos, o problema: Vamos criar uma função que faça a mesma coisa que funções como strtolower, strtoupper, ucwords, etc. Pra isso também iremos usar um pouco de expressões regulares (excelente tutorial/livro em guia-er.sourceforge.net) e obviamente, operadores bit-a-bit.

Primeiro temos que analisar a relação entre letras maiúsculas e letras minúsculas dentro da tabela ASCII. Tomemos como exemplo a letra “A”. Como maiúscula ela tem o código 65 e como minúscula 97. Diferença de 32 (97-65) que equivale ao caractere espaço (procure sempre olhar esses dados na tabela). Vamos visualizar esses números como binários:


65: 1000001
97: 1100001
32: 0100000


Agora você precisa lembrar como funcionam os operadores “&”, “^” e “|”. Supondo que você queira passar uma letra maiúscula para minúscula você precisará usar o operador “|”. Lembre-se que com esse operador, na posição que tiver pelo menos um número “1” será colocado obviamente um número “1” e onde tiver dois 0s um número “0”. Neste caso você tem a letra “A” (ASCII 65) e vai passar para maiúscula, portanto você deve comparar com “ “ (ASCII 32), analise o esquema abaixo seguindo a regra do operador “|”, assim você chega ao valor 97:


65: 1100001
32: 0100000
97: 1100001


Agora supondo que você tenha a letra “a” (ASCII 97) e queira passar para maiúscula, nesse caso você precisa usar o operador “^”. Lembre-se, com esse operador é atribuído um número “1” onde tiver um “1” e um “0”. Seria basicamente o mesmo do OR, mas se tiver dois números “1” na posição será então atribuído o valor “0”. Observe agora os valores abaixo e analise seguindo a regra do operador “^”, você vai chegar ao valor 65:


97: 1100001
32: 0100000
65: 1000001


Na próxima página eu mostro como isso pode ser feito em PHP e passo a função final de strtolower e strtoupper.




<< Anterior 1 2 3 Próxima >>

 
Imprimir  |  Enviar para um Amigo


Comentários de Usuários

Tão ruim assim?
publicado por Alisson Carlos de F. Rodrigues - 2007-04-02 07:47:53

O artigo ficou tão ruim assim pra não receber nenhum comentário e ter nota 6.33?

.
publicado por Felipe Cardoso Martins - 2007-04-04 20:39:47

Alisson, este artigo está ótimo...
Porém é algo raramente utilizado em php, acredito que poucos hoje já tiveram problemas que isto ajudaria a resolver!
Abraço,
Felipe

bom!
publicado por xoom - 2007-04-09 07:18:32

Mto bom...ja utilizava esse metodo aqui no trampo! ^^

XOR
publicado por Felipe Nascimento S. Pena - 2007-04-14 07:14:09

^ => xor

Publique os seus Comentários

Nome:
Email:
Título:
Comentário:

NOTA: Cadastre-se no site para poder publicar comentários.

 
webmaster: João Prado Maia   © 2000 - 2005 phpbrasil.com
Gerado em 2.413 segundos