Variables en C

sábado, 14 de noviembre de 2009 en 2:13
La memoria de los ordenadores está formada por espacios individuales de almacenamiento contiguos, cada uno de ellos de 8 bits, es decir, cada uno de ellos capaz de almacenar un valor entre 0 y 255. Cada una de esas celdas de almacenamiento tiene una dirección única secuencial. Cuando yo declaro una variable en C lo que estoy haciendo es:

  1. Reservando un determinado número de celdas de la memoria contiguas para almacenar los valores que pueda contener la variable. El compilador determina el espacio necesario a partir del tipo de variable que hayamos definido.
  2. Dando un nombre a la dirección de memoria de la primera celda del espacio de memoria reservado.

Obviamente, nuestros programas en C podrán manejar valores más allá del rango 0-255. Para ello, las variables podrán comprender más de una celda. Veamos un ejemplo de cómo se guardan en memoria tres variables:
unsigned char a;  /* Valores comprendidos entre 0 y 255 */
unsigned short b; /* Valores comprendidos entre 0 y 65535 */
unsigned int c;   /* Valores comprendidos entre 0 y 4294967295 */
Por supuesto también podremos definir variables que puedan contener valores negativos. En las tres variables de arriba la palabra unsigned le está diciendo al compilador que sólo quiero almacenar en ellas valores positivos.
En memoria, estas variables podrían quedar almacenadas más o menos así:


La variable a ocupa una celda (1*8 = 8 bits), la variable b dos celdas (2*8 = 16 bits) y la variable c cuatro celdas (4*8 = 32 bits). Según la información que vaya a almacenar definiremos cada variable con el tipo más adecuado según unos criterios que estudiaremos más adelante para lograr que nuestro programa utilice la menor cantidad de memoria y al mismo tiempo se ejecute lo más rápido posible.

Todo esto que os cuento es válido para programas de 32 bits que son los que vamos a crear (en sistemas operativos de 64 bits cambia un poco). ¿De dónde salen los valores 255, 65535 y 4294967295? Pues son respectivamente 28 ‒ 1, 216 ‒ 1 y 232 ‒ 1, es decir, que una variable definida como unsigned char puede almacenar 256 valores diferentes (28), que van desde 0 hasta 255 = 28 ‒ 1.

¿Y qué pasa si meto en una variable definida como unsigned char un valor superior o inferior al rango de valores permitido?

Por ejemplo:
unsigned char a=256;
Pues sencillamente que la variable a almacenará el valor 0. Si, por el contrario, hacemos
unsigned char a=-1;
La variable a almacenará el valor 255.

¿Sencillo verdad? Pues eso es todo por ahora.

Comentario técnico no imprescindible para seguir el curso. Introducción al sistema de numeración binario.

En informática decimos que 1 bit es la mínima unidad de información que un ordenador puede manejar. El valor de 1 bit es o un cero o un uno. Con un bit puedo almacenar un máximo de dos valores (cero o uno), porque 21 = 2, ¿verdad? (es un problema simple de combinatoria para los que sepan lo que es eso)

Con dos bits podemos representar 4 posibles valores (22 = 4) que son:
00 = 0
01 = 1
10 = 2
11 = 3
es decir, que van desde 0 hasta 22 ‒ 1 = 3. Con 3 bits tenemos:
000 = 0
001 = 1
010 = 2
011 = 3
100 = 4
101 = 5
110 = 6
111 = 7
Siendo 7 = 23 ‒ 1. Con 4 bits (4 bits recibe el nombre de un nibble) podemos llegar hasta 15 y así podemos seguir todo lo que queremos. En la práctica se dice que 8 bits son un byte. Dos bytes se llama un word (word es 'palabra' en inglés) y dos word un dword (double word, palabra doble).

Un saludo:
Manuel Llorens

0 comentarios

Publicar un comentario

Powered by Blogger | Entries (RSS) | Comments (RSS) | Designed by MB Web Design | XML Coded By Cahayabiru.com