Introducción a la programación en Argentum Online parte 2
Introducción a la programación en Argentum online (parte 2):
Luego de mucho tiempo, volvemos a la redacción de artículos de programación en AO, continuando la última entrega Introducción. Hoy vamos a hablar un poco de fundamentos de la informática.
Empecemos por un tema que tocamos en la primera entrega: Las variables, sus tipos y sus rangos permitidos para el almacenamiento de información, como vimos anteriormente, un byte puede guardar un número entero entre 0 y 255, un integer un número entero entre -32.768 y 32.767 y un long, un número entero entre -2.147.483.648 y 2.147.483.647, pero esto no es un capricho o un límite establecido de forma arbitraria a voluntad de un inventor obsesionado con los números azarosos, todo lo contrario, veamos porqué...
¿Por qué las variables tienen un límite?
Una variable es en definitiva, un pequeño espacio de nuestra memoria ram destinado al guardado de información en el lenguaje de las computadoras, el binario.
Para entender porqué se usa este sistema numeracional, tenemos que entender como funciona, por encima, una memoria a nivel hardware. Si es un disco entonces podemos pensarlo como una serie de imanes agrupados en aros, un aro dentro del otro, en el que los imanes pueden tener polaridad positiva o negativa, básicamente, estar apuntados hacia arriba o hacia abajo. En una memoria ram no hay imanes, se trata mas bien de "pines", por decirlo de forma simple, que pueden contener carga eléctrica o no.
Como empezarán a ver, imanes hacia arriba o imanes hacia abajo, pines cargados con electricidad o sin electricidad, las memorias almacenan la información en notación binaria porque naturalmente, sus unidades básicas de almacenamiento solo tienen dos posibles estados, podríamos decir que un imán apuntado hacia arriba es un 1 mientras que uno apuntado hacia abajo es un 0 o que un pin con carga eléctrica representa un 1 mientras que otro sin carga, un 0.
Vale la pena aclarar que las variables se almacenan en la ram, la memoria donde se guarda de forma temporal la información, podría decirse que es una "memoria a corto plazo" de la computadora, mientras que el disco es la "memoria de largo plazo". Esto se debe a que los imanes, una vez orientados no pierden su polaridad rápidamente, por eso un disco abandonado hace años puede todavía contener la información que guardaba en su momento mientras que una serie de pines organizados de forma bonita no ya que estos pierden la carga que contienen de forma constante, una vez que se desconecta la alimentación, su contenido se evapora a la velocidad que la electricidad se escapa de sus capacitores, pero eso es tema para otro día.
La información que guardamos en una variable usando nuestro software de alto nivel, en la pc a nivel mecánico se guarda como pines cargados o vacíos, como unos o ceros representando el valor numérico que hayamos asignado. El binario puede parecer un codex indecifrable a simple ojo, pero en realidad sigue la misma lógica que el decimal, el hexadecimal, o cualquier otro sistema numeracional posicional que elijamos:
En el decimal, contamos desde el cero: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9... no tenemos más números! Tomamos el siguiente número (1) y a continuación asignamos nuevamente la escala, obteniendo: 10, 11, 12, 13, 14, 15, 16, 17, 18, 19... nuevamente no tenemos más números, por lo que tomamos el siguiente (2) y repetimos el procedimiento: 20, 21, 22, 23, 24, 25, 26, 27, 28, 29... nuevamente estamos en la misma situación, tomamos el siguiente (3) y repetimos, luego el (4), luego el (5) y creo que todos sabemos como sigue hasta el (9), donde concadenamos la escala entera hasta llegar al número 99 y a partir de ahí ya no tenemos más números para el primer dígito ni para el segundo, por lo que nuevamente tomamos el siguiente número al (0), cero que en teoría teníamos de forma imaginaria a la izquierda, y continuamos con la lógica concadenante: 100, 101, 102, 103, 104, 105, 106, etc... En el binario el sistema es exactamente igual, solo que con muchos ménos números en nuestra escala: Tenemos solamente el 1 y el 0 para efectuar nuestro procedimiento, pero en síntesis hacemos lo mismo, representamos el aumento de una unidad con lo que tenemos, por lo que contamos desde el cero: 0, 1... y ya no tenemos más números! Tomamos el siguiente (1) y comenzamos: 10, 11... ups, rápidamente tocamos el límite, continuemos con el siguiente: 100, 101, 110, 111, nuevamente agotamos nuestras combinaciones posibles, concadenamos otro dígito y comenzamos de nuevo: 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111, y nuevamente: no tenemos más! La escala continuaría como se imaginan: 10000, 10001, 10010, etc... Por lo que el 0 en binario representa al 0 en decimal, el 1 en binario al 1 en decimal, pero el 10 en binario representa al 2 en decimal, el 11 en binario representa al 3, el 100 en binario representa al 4, el 101 en binario al 5 en decimal y así sucesivamente... Como mencioné anteriormente, las memorias se componen de unidades básicas: "bits", que solo comprenden dos estados, los cuales representan un 1 o un 0, estas unidades se agrupan de a 8 para conformar el famosísimo "byte". Ahora que sabemos todo esto analizemos un poco el rango permitido de cada variable:
* Byte: Como su nombre lo indica, es un "byte", es decir, una agrupación de 8 bits. En visual basic 6, esta es la unidad más pequeña de información que puede ocupar una variable en memoria.
Cada combinación de unos y ceros representa un número decimal entre 0 y 255, esto no es casualidad, se debe a que la cantidad de combinaciones posibles en un grupo de 8 unidades binarias es 256, teniendo en cuenta el 0 como una de esas combinaciones, el rango de este tipo de variable es literalmente la cantidad de combinaciones que se pueden obtener de un grupo de 8 bits.
Pensémoslo a pequeña escala: Si tengo dos luces una a la derecha y otra a la izquierda, estas pueden estar prendidas o apagadas, ¿cuantas combinaciones posibles de luces prendidas y apagadas existen? Bueno, la primera sería las dos apagadas, la segunda las dos prendidas, la tercera sería la luz de la derecha prendida y la de la izquierda apagada y la cuarta la de la derecha apagada y la de la izquierda prendida. Si llevamos la idea a solo tres luces, las combinaciones aumentan exponencialmente, si hacen la cuenta - no voy a escribir las combinaciones - notarán que ya son 8 posibles combinaciones, con 4 luces son 16, con 5 luces 32, con 6 luces 64, con 7 luces 128, con 8 luces, finalmente: 256.
La fórmula para calcular la cantidad de combinaciones posibles en un grupo de unidades que pueden tener dos estados diferentes se resume a: (Estados posibles) ^ (Cantidad de unidades).
En este caso: 2^8, un byte hecho y derecho: 256 combinaciones, 256 posibles valores almacenables.
* Integer: Las variables integer son 2 bytes unidos para almacenar un solo valor entero, es decir 16 bits de memoria designados para guardar un número.
Si aplicamos la fórmula obtenemos que 2^16 es 65.536, si nos fijamos, integer guarda números enteros entre -32.768 y 32.767, exactamente 65.536 posibles números distintos, es decir, la cantidad de combinaciones posibles de pines con carga o vacíos.
*Long: Las variables long guardan números enteros en un grupo de 4 bytes (32 bits), es decir que estamos reservando 32 pines de nuestra memoria para trabajar como un solo grupo, siguiendo nuestra fórmula (2^32), podemos determinar que es capaz de producir 4.294.967.296 combinaciones de pines "prendidos y apagados" distintas, por ende, es capaz de almacenar mas de cuatro mil millones de números enteros.
Si nos fijamos el rango aceptable de números para una variable long en la documentación de microsoft vamos a encontrarnos con esto: -2.147.483.648 y 2.147.483.647, efectivamente, 4.294.967.296 números distintos.
Como decía al principio del artículo, no fue el capricho de un amante de los números al azar, sino todo lo contrario.
Detalles:
La palabra reservada de vb6 para declarar una variable es "Dim", se puede pensar como la abreviación de "Dimensionar", la sintaxis completa para declarar una variable llamada "ejemplo" de tipo long sería:
Dim se refiere a que dimensión tiene en memoria esta variable, 1 byte, 2 bytes, 4 bytes, etc, "as" significa "como" en inglés, por lo que básicamente estamos imperando: "Dimensioná Ejemplo como una variable numérica entera larga" (long = 4 bytes).
Comentarios
Publicar un comentario