Está en la página 1de 2

Fragmentos y resumen basado en el libro: Deitel & Deitel. C/C++ Cómo programar. 4ta edición.

Operadores 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 desplazamiento a la izquierda desplaza hacia la izquierda los bits de su


operando izquierdo, el número de bits especificados en su operando derecho. El operador de
desplazamiento a la derecha desplaza hacia la derecha los bits de su operando izquierdo, el
número de bits especificados en su operando derecho.

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.

La tabla a continuación resume los operadores a nivel de bits.


Cuando se trabaja en lenguaje C en ramas como la electrónica y la automatización es frecuente
emplear alguno de los operadores a nivel de bits. La forma más común de visualizar los datos
para poder ver el funcionamiento de estos operadores es como hexadecimales u octales. Para
mostrar en pantalla o recibir de teclado un entero como hexadecimal el especificador de
conversión es: %x, y el especificador para octal es: %o. Los valores literales en hexadecimal se
ponen con el prefijo 0x, por ejemplo, el 3F hexadecimal se pone como 0x3f.

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 desplazado a la izquierda en 2 bits: %x\n", a<<2);


// Imprime c hex que en binario es 1100

printf("a XOR b es: %x\n", a^b); //a^b es (11 XOR 10) = 01 que es 1 hex

printf("c AND 1111 binario (F hexadecimal) es: %x\n", c&0xf);


// (1111 1111 AND 0000 1111) = 0000 1111 = F hex

printf("c complementado a uno es: %x", ~c);


// 000000ff hex complementado es ffffff00 hex

return 0;
}

También podría gustarte