|
Introducción: En los sistemas de microcontrol (embedded systems), el programador debe decidir el tipo de formato que habrá de usar para el manejo de sus números, sean éstos constantes ó variables. Generalmente, en aplicaciones en donde no se usan operaciones aritméticas complejas, se manejan número enteros, los cuales, a diferencia del formato de punto flotante, son sencillos de manipular en lenguaje ensamblador y utilizan un mínimo de espacio tanto en la memoria de datos como en la memoria de código. Dependiendo de la aplicación, el programador habrá de elegir entre el manejo de números enteros positivos y números enteros con signo. En ambos casos, en microcontroladores de 8 bits, como los son el 16F84 y el 16F628, puede manejarse el formato de precisión sencilla (1 byte, 8 bits) ó doble precisión (2 bytes, 16 bits). |
1. Formato de números enteros positivos: Cada número ocupa una ó dos localidades de la memoria de datos. Las variables pueden tomar valores entre 0 y 255 (8 bits) ó de 0 a 65,535 (16 bits). El programador debe asegurarse que en ningún caso el resultado de alguna operación rebase los valores señalados. En los siguientes ejemplos se muestran los valores binarios y hexadecimales que los números ocuparían en la memoria de datos. En caso de programar en ANSI C, también se muestran las expresiones correspondientes, para el compilador HITECH.
2. Formato de números enteros con signo (complemento a dos): Para representar números enteros positivos y negativos, tanto en precisión sencilla o doble, se utiliza el formato conocido como "complemento a dos" (two's complement). Para encontrar el equivalente negativo de un número, deben de seguirse los siguientes pasos sobre el número escrito en binario: de derecha a izquierda, escribir cada dígito hasta encontrar el primer "1", el cual debe de escribirse. A partir de este "1", escribir el complemento a 1 del resto de los números, es decir los "1" convertirlos en "0" y los "0" en "1". Tomemos como ejemplo el número decimal 38. Para encontrar el -38, obtenemos el complemento a dos:
Para confirmar la operación, realizamos la suma binaria del +38 con el -38, la cual nos da 0. Observe que al usar el formato complemento a dos, el bit del signo indica si el número es positivo o negativo. Un "0" indica número positivo y un "1", número negativo. Es muy importante aclarar que, al usar complemento a dos, ahora el rango posible de valores usando precisión simple (8 bits) es de -128 al +127 y usando doble precisión (16 bits) es de -32,768 al +32,767. Cualquier número que rebase estos rangos, es inválido para este formato. Es tarea del programador prevenir que en ningún caso, la aplicación produzca algún número con valores fuera de rango. Aquí se dan algunos ejemplos:
Notas importante con respecto a la expresión "char": -Todos los compiladores ANSI C, asignan a la expresión "char" un valor que se almacena en memoria en 8 bits (1 byte). Algunos compiladores C pueden considerar la expresión "char" únicamente válida para definir códigos ASCII (strings), y por tanto, números siempre positivos. -Sin embargo, no existe una estandarización en cuanto al formato empleado por los distintos compiladores para almacenar el valor de los números definidos como "char" en memoria. En estos ejemplos se está usando el estándar del compilador de HiTech, el cual almacena los valores en formato complemento a dos y permite por tanto manejar números con signo (del -128 al +127).
|