Introducción a la programación con c

Page 90

2.1 Vectores est´aticos

Big-endian y little-endian Lo bueno de los est´ andares es. . . que hay muchos donde elegir. No hay forma de ponerse de acuerdo. Muchos ordenadores almacenan los n´ umeros enteros de m´ as de 8 bits disponiendo los bits m´ as significativos en la direcci´ on de memoria m´ as baja y otros, en la m´ as alta. Los primeros se dice que siguen la codificaci´ on ((big-endian)) y los segundos, ((little-endian)). Pongamos un ejemplo. El n´ umero 67586 se representa en binario con cuatro bytes: 00000000 00000001 00001000 00000010 Supongamos que ese valor se almacena en los cuatro bytes que empiezan en la direcci´ on 1000. En un ordenador ((big-endian)), se dispondr´ıan en memoria as´ı (te indicamos bajo cada byte su direcci´ on de memoria): 1000:

00000000

00000001

00001000

00000010

1000

1001

1002

1003

En un ordenador ((little-endian)), por contra, se representar´ıa de esta otra forma: 1000:

00000010

00001000

00000001

00000000

1000

1001

1002

1003

Los ordenadores PC (que usan microprocesadores Intel y AMD), por ejemplo, son ((littleendian)) y los Macintosh basados en microprocesadores Motorola son ((big-endian)). Aunque nosotros trabajamos en clase con ordenadores Intel, te mostraremos los valores binarios como est´ as acostumbrado a verlos: con el byte m´ as significativo a la izquierda. La diferente codificaci´ on de unas y otras plataformas plantea serios problemas a la hora de intercambiar informaci´ on en ficheros binarios, es decir, ficheros que contienen volcados de la informaci´ on en memoria. Nos detendremos nuevamente sobre esta cuesti´ on cuando estudiamos ficheros. Por cierto, lo de ((little-endian)) y ((big-endian)) viene de ((Los viajes de Gulliver)), la novela de Johnathan Swift. En ella, los liliputienses debaten sobre una importante cuesti´ on pol´ıtica: ¿deben abrirse los huevos pasados por agua por su extremo grande, como defiende el partido Big-Endian, o por su extremo puntiagudo, como mantiene el partido Little-Endian?

¿Recuerdas el operador & que te presentamos en el cap´ıtulo anterior? Es un operador unario que permite conocer la direcci´ on de memoria de una variable. Puedes aplicar el operador & a un elemento del vector. Por ejemplo, &a[2] es la direcci´on de memoria en la que empieza a[2], es decir, la direcci´ on 1008 en el ejemplo. Veamos qu´e direcci´ on ocupa cada elemento de un vector cuando ejecutamos un programa sobre un computador real: direcciones vector.c 1

direcciones vector.c

#include <stdio.h>

2 3

#define TALLA 5

4 5 6 7

int main(void) { int a[TALLA], i;

8

for (i = 0; i < TALLA; i++) printf ("Direcci´ on de a[%d]: %u\n", i, (unsigned int) &a[i]);

9 10 11

return 0;

12 13

}

Al ejecutar el programa obtenemos en pantalla lo siguiente (puede que obtengas un resultado diferente si haces la prueba t´ u mismo, pues el vector puede estar en un lugar cualquiera de la memoria): Direcci´ on de a[0]: 3221222640 Direcci´ on de a[1]: 3221222644 Direcci´ on de a[2]: 3221222648

84

Introducci´ on a la Programaci´ on con C


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.