HOME

PRODUCTOS

PROYECTOS

TUTORIALES

VIDEOS

FREEWARE

PROGRAMAS

FUNCIONES C

EMPRESA

ENGLISH

                   

 tutorial: el formato de números enteros positivos y enteros con signo (complemento a dos).

 

 

NUMEROSENTEROS.jpg (15751 bytes)

 

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.

 

NUMERO DECIMAL PRECISION BINARIO VALORES ALMACENADOS EN LA MEMORIA DE DATOS (HEXADECIMAL) EXPRESION EN ANSI C
+38 SENCILLA 00100110 26 char a; a=38;
+38 DOBLE 00000000 00100110 00 26 unsigned int a; a=38;
+1693 DOBLE 00000110 10011101 06 9D unsigned int a; a=1693;
+119 SENCILLA 01110111 77 char a; a=119;
+171 SENCILLA 10101010 AB char a; a=171;

 

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:

 

FORMATOCOMPLEMENTOADOS.jpg (33097 bytes)

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:

NUMERO DECIMAL PRECISION BINARIO VALORES ALMACENADOS EN LA MEMORIA DE DATOS (HEXADECIMAL) EXPRESION EN ANSI C, COMPILADOR HITECH
+38 SENCILLA 00100110 26 char a; a=38;
-38 SENCILLA 11011010 DA char a; a= -38
-38 DOBLE 11111111 11011010 FF DA int a; a= -38;
+1693 DOBLE 00000110 10011101 06 9D int a; a=1693;
-1693 DOBLE 11111001 01100011 F9 63 int a; a=-1693;

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).