Básicamente vamos a hacer una revisión de todos los operadores de bits del lenguaje C y mostrar su funcionamiento.
Citar
& AND
&= AND Asignativo
| OR
|= OR Asignativo
^ XOR
^= XOR Asignativo
~ Complemento de Uno
<< Desplazamiento Izquierdo
<<= Desplazamiento Izquierdo Asignativo
>> Desplazamiento Derecho
>>= Desplazamiento Derecho Asignativo
&= AND Asignativo
| OR
|= OR Asignativo
^ XOR
^= XOR Asignativo
~ Complemento de Uno
<< Desplazamiento Izquierdo
<<= Desplazamiento Izquierdo Asignativo
>> Desplazamiento Derecho
>>= Desplazamiento Derecho Asignativo
Para mostrar su funcionamiento, pongo ejemplos de este enlace:
http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/CONCEPT/bitwise.html
Sólo que traduje lo que estaba en otro idioma e hice una combinación de todos los ejemplos como para que quede algo entendible.
AND - OR - XOR ( requieren dos operandos y hacen comparaciones de bits.)
=================================================
AND & copia un bit al resultado si existe en los dos operandos.
Código:
unsigned int a = 60; /* 60 = 0011 1100 */
unsigned int b = 13; /* 13 = 0000 1101 */
unsigned int c = 0;
c = a & b; /* 12 = 0000 1100 */
OR | copia un bit al resultado si existe en algún operando.
Código:
unsigned int a = 60; /* 60 = 0011 1100 */
unsigned int b = 13; /* 13 = 0000 1101 */
unsigned int c = 0;
c = a | b; /* 61 = 0011 1101 */
XOR ^ copia un bit al resultado si existe en un operando y no en otro.
Código:
unsigned int a = 60; /* 60 = 0011 1100 */
unsigned int b = 13; /* 13 = 0000 1101 */
unsigned int c = 0;
c = a ^ b; /* 49 = 0011 0001 */
Complemento de uno ( es unario (require un operando))
======================================
NOT ~ tiene el efecto de invertir bits.
Código:
unsigned int Valor=4; /* 4 = 0000 0100 */
Valor = ~ Valor; /* 251 = 1111 1011 */
Cambio de bits
============
Los siguientes operadores se usan para desplazar bits a la derecha o izquierda.
Código:
<< ; >> ; <<= ; >>=
El valor del operando izquierdo es movido a la derecha o izquierda por el número de bits especificado
en el operando derecho.
Por ejemplo:
Código:
unsigned int Valor=4; /* 4 = 0000 0100 */
unsigned int Desplazamiento=2;
Valor = Valor << Desplazamiento; /* 16 = 0001 0000 */
Valor <<= Desplazamiento; /* 64 = 0100 0000 */
printf("%d\n", Valor); /* Muestra 64 */
Usualmente, El bit vacío resultante es asignado como cero (padding).
Nota: Siempre use variables 'unsigned' con estos operadores para eludir resultados impredecibles.
Los usos de enumeran a continuación pero los ejemplos se los dejo para que los busquen en la red, o si los usuarios del foro de C/C++ se animan a poner sus ejemplos personales del uso de estos operadores XD
Citar
Usos para Operadores de Bits:
=====================
- Extraer y borrar valores
- Insertar y combinar valores
- Intercambiar variables
- Reemplazar operaciones aritméticas
=====================
- Extraer y borrar valores
- Insertar y combinar valores
- Intercambiar variables
- Reemplazar operaciones aritméticas
De todas formas dejo para descargar un proyecto que es parte de esta demostración, y dentro de la carpeta que tiene, hay otra con ejemplos tomados de la web original.
Proyecto MSVC++ 6.0