Operadores de bits

Kalindor
28 de Marzo del 2004
Hola...mi pregunta se refiere a los operadores de bits...es que estuve leyendo algo acerca de esto en un libro pero la verdad es que no me quedo muy claro. Si alguien me pudiese explicar los usos de el AND y el OR (exclusivo e inclusivo)...muchas gracias al que me pueda ayudar.

Alejandro_
28 de Marzo del 2004
Piénsalo así: 1 representa "cierto"; 0 representa "falso".

a&b == 1 si los dos bits son 1

si a es cierto y b también, quien diga a&b dirá algo cierto;
si a es cierto y b falso, quien diga a&b miente;
si a es false y b es cierto, quien diga a&b miente;
si a es false y b es falso, quien diga a&b miente.

Resumiendo: la afirmación conjunta de a y b es cierta sólo cuando la afirmación de a es cierta y la afirmación de b también; o dicho más corto:
a&b es cierto sólo cuando los dos lo son (¡Vaya sabiduría!)

ejemplo:
1101 1011
&
1001 0011
---------
1001 0011

El mismo tipo de análisis sesudo se puede aplicar a los otros operadores, y si te tomas la molestia, encontrarás que:

a|b es cierto cuando alguno de los dos lo es.

a^b es cierto cuando uno es cierto y el otro falso.

~a invierte los bits: el que estaba en 1 se pone en 0 y viceversa.

n<<p corre hacia la izquierda tantos bits como indique p.

n>>p corre hacia la derecha tantos bits como indique p.

Y eso es todo. En los programas de la vida real suelen encontrarse expresiones un poco más elaboradas, pero nada que temer.

Por ejemplo, si tienes un valarray de enteros:

valarray<int> v;

v <<= 2; aplica el corrimiento a cada uno de los enteros de v y los actualiza. (<<2 es lo mismo que multiplicar por 4)

Suerte,

Alejandro