APUNTE 1: Sistemas de Numeración y Medidas Informáticas Introducción En programación es frecuente acudir a diferentes sistemas de numeración según las circunstancias. Hay que tener en cuenta que el hombre usa el sistema decimal, (según una opinión bastante general debido a una circunstancia más o menos afortunada: por la simple razón de que tiene diez dedos entre las dos manos. A menudo se usa el cinco como base de numeración auxiliar). La palabra “dígito” y “dedo” tienen la misma raíz latina, por eso usamos una numeración con 10 dígitos o dedos. Para contar de 1 a 10 es fácil, pero ¿qué pasa cuando hay que contar más de diez cosas?. Pues usamos las manos de un "amigo" para contar cuantas veces hemos usado los dedos de las nuestras, así "12", sería dos más una vez diez. Otra circunstancia curiosa es que en el sistema de numeración que usamos los números se leen y escriben de derecha a izquierda, al revés del modo en que escribimos las palabras. Cuando interpretamos números de varias cifras, hay que empezar por la derecha, el primer dígito son unidades, el siguiente decenas, es decir cuantos grupos de 10 elementos estamos contando. El siguiente centenas, es decir el número de grupos de 10 elementos de grupos de 10 elementos, o sea el número de grupos de 100 elementos. Y así sucesivamente. Sistema Binario Estamos habituados al sistema de numeración decimal y nos parece lógico usarlo en todo momento. Pero hay ocasiones en donde no es el más apropiado. Uno de esos mundos, en los que existen sistemas más descriptivos de los fenómenos que el decimal, es el de los procesadores. Las computadoras trabajan internamente con dos niveles de voltaje, por lo que su sistema de numeración natural es el sistema binario (encendido, apagado). Por su naturaleza digital, las computadoras son máquinas esencialmente binarias. Utilizan el sistema de numeración llamado binario, en el que sólo se disponen dos signos: 0 y 1. Contando correlativamente de manera binaria, diríamos: 0, 1, 10, 11, 100, 101, 110, 111, ... Tanto el sistema binario, como el decimal y el hexadecimal, son sistemas en los que la posición de cada dígito representa información de mucha importancia. Veamos un ejemplo de cómo se descompone posicionalmente un numero decimal: El número 7935 = 1000 * 7 + 100 * 9 + 10 * 3 + 1 * 5 Como hay diez símbolos (del 0 al 9), una decena representa 10 unidades, una centena representa 10 decenas, etc. Diez unidades de una posición, valen una unidad en la posición contigua a la izquierda. En el sistema binario, con dos símbolos solamente, cada posición a la izquierda vale el doble de la que le sigue a la derecha. O lo que es lo mismo decir, la relación entre las sucesivas posiciones se da según la sucesión 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536 ..... la que a su vez puede expresarse como potencias crecientes de 2: 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 210 , 211 , 212 , 213 , 214 , 215 , 216 ..... Para el sistema de numeración binaria, valen las dos reglas prácticas siguientes: Un número de n bits puede representar a un decimal de un valor de hasta 2n - 1 El multiplicador del bit de posición n, vale 2n Apunte 1 – Sistemas Binario y Hexadecimal - Página 1 de 3 Ejemplos: un número de 8 bits cuenta desde 0 hasta 255. El multiplicador del bit 7 es 128. (el bit número 7 tiene un “peso” de 128) Notar que siempre se comienza a contar desde cero. En un número binario, al igual que en un decimal, el bit menos significativo (correspondiente al multiplicador 2 0, o sea 1) es el que se escribe más a la derecha: bit# 10 9 8 7 6 5 4 3 2 1 0 mult 1024 512 256 128 64 32 16 8 4 2 1 Veamos como ejemplo práctico un número de 7 bits cualquiera como 1001101 (notar que los bits se ordenan 6...0) 1001101 = 64 * 1 + 32 * 0 + 16 * 0 + 8 * 1 + 4 * 1 + 2 * 0 + 1 * 1 Esto nos proporciona una forma de traducir (cambiar de base) un número binario a decimal. Basta sumar aquellos multiplicadores cuyos bits estén en 1 e ignorar aquellos cuyo bit es 0. En nuestro anterior ejemplo es: 1001101 = 64 + 8 + 4 + 1 = 77 decimal Los números binarios son los que efectivamente fluyen dentro del procesador en una PC, se guardan en memoria o disco, o se transmiten (modulados) por modem. Pero un humano no puede manipular con facilidad números como: 1101 0011 0101 0110 1010 0101 1100 0011 que es de 32 bits (hay 32 símbolos en el número, desde el bit 31 a la izquierda hasta el bit 0, a la derecha) y se ha ordenado ex-profeso en grupos de a cuatro por cuestiones de comodidad que serán evidentes algo más adelante. Desafortunadamente las computadoras trabajan en sistema binario y aunque es posible hacer la conversión entre decimal y binario, no es precisamente una tarea cómoda. El sistema de numeración hexadecimal, o sea de base 16, resuelve este problema: es compacto y nos proporciona un mecanismo sencillo de conversión hacia el formato binario. El Bit Es el acrónimo de Binary Digit (dígito binario). Un bit es la unidad mínima de información empleada en informática. Representa un uno o un cero (abierto o cerrado, blanco o negro, cualquier sistema de codificación sirve). A través de secuencias de bits, se puede codificar cualquier valor discreto como, por ejemplo, números, palabras e imágenes. Apunte 1 – Sistemas Binario y Hexadecimal - Página 2 de 3 Byte Se describe como la unidad básica de almacenamiento de información, siendo equivalente a ocho bits. Los prefijos kilo, mega, giga, etc. se consideran potencias de 1024 en lugar de potencias de 1000. Esto es así porque 1024 es la potencia de 2 (210) más cercana a 1000. Nombre Abrev. Factor kilo K 1 byte: 8 bits 210 = 1024 20 mega M 2 = 1 048 576 giga G 230 = 1 073 741 824 tera T 240 = 1 099 511 627 776 peta P 250 = 1 125 899 906 842 624 exa E 260 = 1 152 921 504 606 846 976 zetta Z 270 = 1 180 591 620 717 411 303 424 yotta Y 1 Kilobyte: 1024 bytes 1 Megabyte: 1024 Kilobytes (Kb) 1 Gigabyte: 1024 Megabytes (Mb) 1 Terabyte: 1024 Gigabytes (Gb) 80 2 = 1 208 925 819 614 629 174 706 176 Sistema Hexadecimal El sistema hexadecimal es un sistema de numeración vinculado a la informática, ya que las computadoras interpretan los lenguajes de programación en bytes, que están compuestos de ocho dígitos. Como veremos en la unidad de Hardware, el procesador 80386 hace ya más de una década manipulaba sin problemas números de 32 bits. Un humano necesita manejarlo de otra manera y por eso se inventó el sistema hexadecimal, con 16 símbolos, ya que si uno agrupa cuatro bits obtiene 16 combinaciones posibles (24 = 16). Esto tiene una razón. Nuestro sistema decimal no se corresponde en la cantidad de dígitos con el binario en cambio, el hexadecimal si, porque cada cuatro bits representan un dígito hexadecimal exacto. En un sistema hexadecimal, necesitamos 16 símbolos. Ya que somos muy buenos manejando números decimales, adoptamos esos diez símbolos (0, 1, 2, 3, 4, 5, 6, 7, 8 y 9) para empezar, pero hay que agregar otros seis: A, B, C, D, E y F Cada trozo de información recibe un nombre propio según la cantidad de bits que posea: un bit es la unidad de información binaria y con él se puede contar desde 0 hasta 1 un nibble son cuatro bits y se puede contar desde 0 hasta 15 (F en hexa) con un byte (8 bits) puedo contar desde 0 hasta 255 ó FF hexa una word tiene 16 bits y permite contar desde 0 hasta 65535 ó FFFF en hexa. binario 0000 0001 0010 0011 0100 0101 0110 0111 decimal 0 1 2 3 4 5 6 7 Hexa 0 1 2 3 4 5 6 7 binario 1000 1001 1010 1011 1100 1101 1110 1111 decimal 8 9 10 11 12 13 14 15 Apunte 1 – Sistemas Binario y Hexadecimal - Página 3 de 3 hexa 8 9 A B C D E F