El almacenamiento de información como caracteres codificados es ineficiente cuando la información se registra como numérica pura. Veamos esta situación con la codificación del número 65; si se almacena como caracteres ASCII utilizando un byte por símbolo, se necesita un total de 16 bits, de modo que el número mayor que se podía almacenar en 16 bits (dos bytes) sería 99.
Sin embargo, si utilizamos nota-ción binaria para almacenar enteros, el rango puede ir de 0 a 65.535 (216 – 1) para números de 16 bits. Por consiguiente, la notación binaria (o variantes de ellas) es la más utilizada para el almacenamiento de datos numéricos codificados.
La solución que se adopta para la representación de datos numéricos es la siguiente: al introducir un número en la computadora se codifica y se almacena como un texto o cadena de caracteres, pero dentro del programa a cada dato se le envía un tipo de dato específico y es tarea del programador asociar cada dato al tipo adecuado correspondiente a las tareas y operaciones que se vayan a realizar con dicho dato.
El método práctico realizado por la computadora es que una vez definidos los datos numéricos de un programa, una rutina (función interna) de la biblioteca del compilador (traductor) del lenguaje de programación se encarga de transformar la cadena de caracteres que representa el número en su notación binaria.
Existen dos formas de representar los datos numéricos: números enteros o números reales.
Representación de enteros
Los datos de tipo entero se representan en el interior de la computadora en notación binaria. La memoria ocupada por los tipos enteros depende del sistema, pero normalmente son dos, bytes (en las versiones de MS-DOS y versiones antiguas de Windows y cuatro bytes en los sistemas de 32 bits como Windows o Linux).
Por ejemplo, un entero almacenado en 2 bytes (16 bits): 1000 1110 0101 1011
Los enteros se pueden representar con signo (signed, en C++) o sin signo (unsigned, en C++); es decir, números positivos o negativos. Normalmente, se utiliza un bit para el signo.
Los enteros sin signo al no tener signo pueden contener valores positivos más grandes. Normalmente, si un entero no se especifica «con/sin signo» se suele asignar con signo por defecto u omisión.
El rango de posibles valores de enteros depende del tamaño en bytes ocupado por los números y si se representan con signo o sin signo.
Representación de reales
Los números reales son aquellos que contienen una parte decimal como 2,6 y 3,14152. Los reales se representan en notación científica o en coma flotante; por esta razón en los lenguajes de programación, como C++, se conocen como números en coma flotante.
Existen dos formas de representar los números reales. La primera se utiliza con la notación del punto decimal (ojo en el formato de representación español de números decimales, la parte decimal se re-presenta por coma).
Representación de caracteres
Un documento de texto se escribe utilizando un conjunto de caracteres adecuado al tipo de documento. En los lenguajes de programación se utilizan, principalmente, dos códigos de caracteres.
El más común es ASCII (American Standard Code for Information Interchange) y algunos lenguajes, tal como Java, utilizan Unicode (www.unicode.org). Ambos códigos se basan en la asignación de un código numé-rico a cada uno de los tipos de caracteres del código.
En C++, los caracteres se procesan normalmente usando el tipo char, que asocia cada carácter a un código numérico que se almacena en un byte.
El código ASCII básico que utiliza 7 bits (128 caracteres distintos) y el ASCII ampliado a 8 bits (256 caracteres distintos) son los códigos más utilizados. Así se pueden representar caracteres tales como ‘A’,’B’, ‘c’, ‘$’, ‘4’, ‘5’, etc.
En el caso de C++ se considera un dato de tipo carácter denominado wchar_t que sirve para representar caracteres de tipo internacional para manejar lenguajes extranjeros.