Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Operdores A Nivel de Bits
Operdores A Nivel de Bits
Las computadoras representan internamente todos los datos como secuencias de bits. Cada bit
puede asumir un valor de 0 o 1. En la mayoría de los sistemas, una secuencia de 8 bits forma un
byte; la unidad estándar de almacenamiento para una variable de tipo char. Otros tipos de
datos se almacenan en números con más bytes.
Los operadores a nivel de bits se utilizan para manipular los bits de operandos enteros (char,
short, int y long; tanto signed como unsigned). Los enteros sin signo con frecuencia se utilizan
con los operadores a nivel de bits. Observe que las explicaciones de esta sección sobre los
operadores a nivel de bits muestran la representación binaria de los operandos enteros. Para
una explicación detallada de los sistemas binarios de numeración (también llamados de base 2),
vea el apéndice E del libro.
Los operadores a nivel de bits son: AND a nivel de bits (&), OR inclusivo a nivel de bits (|), OR
exclusivo a nivel de bits (^), desplazamiento a la izquierda (<<), desplazamiento a la derecha
(>>) y complemento (~).
Los operadores a nivel de bits AND, OR inclusivo y OR exclusivo comparan sus dos operandos
bit por bit. El operador AND a nivel de bits establece en 1 cada bit del resultado, si el bit
correspondiente a ambos operandos es 1. El operador OR incluyente a nivel de bits establece
en 1 cada bit del resultado, si el bit correspondiente a uno o a ambos operandos es 1. El
operador OR excluyente a nivel de bits establece en 1 cada bit del resultado, si el bit
correspondiente a exactamente un operando es 1.
El operador de complemento a nivel de bits hace que todos los bits que se encuentran en 0 en
su operando se establezcan en 1 en el resultado, y que todos los que se encuentran en 1 en su
operando, se establezcan en 0 en el resultado.
Ejemplo:
#include <stdio.h>
int main()
{
unsigned a=3, b=2, c=255; //En binario: a=11, b=10 y c=1111 1111
//En hexadecimal: a=3, b=2 y c=FF
printf("Imprime en hexadecimal a=%x, b=%x y c=%x\n", a, b, c);
printf("a XOR b es: %x\n", a^b); //a^b es (11 XOR 10) = 01 que es 1 hex
return 0;
}