Documente Academic
Documente Profesional
Documente Cultură
2 Introduccin
Tanto la programacin de dispositivos perifricos del computador como la
generacin/recogida de seales digitales est cargada de nmeros binarios; por
tanto, es necesario dominar las tcnicas que permiten manipular dichos nmeros a
nivel de bit. Esto es fundamental, por ejemplo, en la programacin de
microcontroladores.
La manipulacin a nivel de bit se hace mediante las operaciones del lgebra de
Boole AND, OR, X-OR y complementos que, aplicadas sistemticamente, permitirn
obtener 0's, 1's, complementar bits, etc. all donde se necesite. Al uso de estas
operaciones sobre un dato se le suele llamar mscara.
A parte de las tcnicas, se ver aqu su aplicacin prctica desde el lenguaje C.
3 Objetivos
Una vez ledo y practicado este documento, el lector ser capaz de:
Manipular los bits de un nmero entero desde el lenguaje C.
4 Desarrollo
Antes de entrar en materia, es interesante hacer notar que el computador digital
es digital' como se acaba de decir y, por tanto, representa internamente toda la
informacin como 0s y 1s.
Para dejar claro este concepto, se ver primero el concepto de representacin
interna-externa empelado en los lenguajes de programacin. A continuacin se
describir la representacin externa en formato hexadecimal como la ms
adecuada al propsito buscado. A continuacin se introducirn los operadores
booleanos necesarios para hacer la manipulacin de nmeros enteros y su
notacin en el lenguaje C. Finalmente, se irn describiendo los distintos tipos de
mscaras que permiten hacer las manipulaciones.
4.1 Representacin externa. Representacin interna
La representacin interna de los nmeros enteros es un caso claro de esta idea.
Internamente, un tipo de dato entero es un nmero binario de una determinada
cantidad de bits que se representa habitualmente en binario natural para enteros
sin signo y en complemento a dos para enteros con signo. Hay otras posibles
representaciones, pero sern siempre secuencias de 0s y 1s.
Para un humano, usar directamente nmeros binarios no est en su naturaleza, as
que los lenguajes de programacin permiten escribir los nmeros en otras
notaciones para facilitar su introduccin; se llama a esto representacin externa.
Insistir en que se trata de un artificio; internamente seguirn siendo nmeros
binarios.
Aunque la representacin externa decimal es la ms comprensible para nosotros,
tambin se proveen otros representaciones ms o menos abstractas; por ejemplo,
se usa la codificacin ASCII para representar smbolos (letras,...), y la
representacin octal y hexadecimal para representar grupos de bits.
return 0;
}
Obsrvese que se escriben nmeros empleando distintos artificios, pero
internamente todo ser binario. Se recomienda probarlo para verificar esta idea, y
modificarlo para experimentar.
La eleccin de una notacin u otra es a conveniencia del programador y nunca al
contrario.
4.2 Representacin hexadecimal
Como el lenguaje C estndar no admite la introduccin directa de nmeros
binarios, la manera recomendada aqu para escribir un nmero binario es emplear
la representacin externa hexadecimal. Esta representacin se dise para
representar nmeros binarios en un equivalente que representa un grupo de 4 bits.
La siguiente tabla contiene las 16 posibles combinaciones binarias y sus
equivalentes en decimal y en hexadecimal.
4.4 Mscaras
Conociendo los operadores anteriores y aplicando simples reglas repetitivas es fcil
manipular adecuadamente los nmeros enteros a nivel de bit. Se dan a
continuacin las recetas para ello.
Suele ser interesante combinar las extracciones de bits con las operaciones de
desplazamiento.
Ejemplo: En los bits 5 al 2 de un nmero entero est contenido un dato de 4 bits.
Para extraerlo, se podr aplicar la mscara binaria 0 ... 01111002 y, a continuacin,
hacer un desplazamiento de 2 posiciones.
Y, expresado en C sera,
resultado = (dato & 0x36) >> 2;
O, tambin,
Expresado en C sera,
resultado = dato & 0xFFE3;
Expresado en C sera,
resultado = dato | 0x26;
Expresado en C sera,
resultado = dato ^ 0xB;
5 Cierre
A lo largo de este objeto de aprendizaje se ha visto cmo manipular
adecuadamente los bits de un nmero entero para
Como se ha visto, la manipulacin a nivel de bit se hace mediante las operaciones
del lgebra de Boole AND, OR, X-OR y complementos que, aplicadas
sistemticamente, permitirn obtener 0's, 1's, complementar bits, etc. all donde se
necesite. Estas tcnicas se llaman mscaras en el mbito informtico y, como se
ha visto, son de inmediata aplicacin prctica desde el lenguaje C.
6 Bibliografa
La siguiente referencias permiten ampliar/practicar lo visto aqu.