http://en.wikipedia.org/wiki/Bitwise_operation
Hay ocasiones en donde necesitas trabajar con bits en lugar de bytes completos. Por ejemplo al recibir algun mensaje de windows o el valor regresado en algun protocolo (ftp,IRC, etc.)
Por ejemplo, supon que tienes un byte en donde el bit 1 significa si hubo error, los bits 2 y 3 contienen el codigo de error y los bits restantes (4,5,6,7,8) contienen la linea donde se produjo el error.
Si todo esta en 0 significa que no hubo error, entonces podrias hacer una simple comparacion:
Código C:
Ver originalif (valorDevuelto > 0) //entonces hubo error
Pero en caso de que haya error, no podrias hacer una comparacion de ese tipo para saber cual fue el tipo de error y cual fue el numero de linea. Es ahi en donde utilizas los operadores a nivel de bits.
Código C:
Ver original// 8 7 6 5 4 3 2 1 #bit
// 1 0 1 0 1 1 1 1 valorDevuelto
if ( valorDevuelto & 1 ) { //AND a primer bit. Es 1 (verdadero) si hubo error
char codError = valorDevuelto & 6; //AND con bits 2 y 3 (00000110 binario)
//codError valdria 6, pero en realidad el codigo de error son los bits 2 y 3
//asi que el bit de la derecha sale sobrando. Aqui se recorren los bits
// un lugar a la dereccha
codError = codError >> 1;
//ahora se deben comparar los bits 4,5,6,7,8
char lineaError = valorDevuelto & 248; //248 = 11111000 binario
//de nuevo los bits de la derecha salen sobrando asi que se recorren los bits
lineaError = lineaError >> 3;
}
Esto es un ejemplo con un solo byte, pero la mayor parte de las veces se utilizan 32 bits.
Recorrer los bits tambien se utiliza para optimizar algunas operaciones. Mover los bits es mas rapido que hacer multiplicaciones o divisiones. Recorrer los bits hacia la izquierda hace que el valor se multiplique por potencias de 2.
Recorrer 1 bits a la izquierda, multiplica por 2
Recorrer 2 bits a la izquierda, multiplica por 4
Recorrer 3 bits a la izquierda, multiplica por 8
Recorrer bits a la derecha divide por potencias de 2.
Esta tecnica se utiliza mayormente en aplicaciones donde hay muchas operaciones aritmeticas, como la programacion grafica.