2. Representación de la Información en Computadoras 2.1 Introducción Las computadoras digitales han hecho posible muchos avances científicos, industriales y comerciales que de otra manera nunca se hubieran alcanzado. La propiedad más sorprendente de una computadora digital es su generalidad. Puede seguir una secuencia de instrucciones, denominada programa, que opera según la información dada. La computadora digital de propósito general es el ejemplo mejor conocido de un sistema digital. Las primeras computadoras digitales se usaron principalmente para cálculos numéricos. En este caso, los elementos discretos que se utilizan son dígitos. Para esta aplicación surgió el término de computadora digital. Los elementos discretos de información se representan en un sistema digital mediante cantidades físicas denominadas señales. Las señales eléctricas como voltajes y corrientes son las más comunes. Las señales en todos los sistemas digitales en la actualidad tienen sólo dos valores discretos y se dicen que son binarios. Los números binarios son los más utilizados en las computadoras debido a la naturaleza de los dispositivos electrónicos. Es más sencillo construir un elemento que pueda estar normalmente abierto o cerrado (biestable) que otro de 10 estados posibles. La representación binaria se seguirá utilizando hasta que se descubra un dispositivo naturalmente dotado de perfecta estabilidad en 10 estados. 2.2 Sistemas de numeración En los sistemas de numeración no posicionales, el valor de una cifra no depende de la posición que ésta ocupe dentro del número. El ejemplo más conocido es el de los números romanos. La representación del número decimal 233 en el sistema de números romanos es: CCXXXIII Donde una C equivale a 100 una X equivale a 10 e I a la unidad En cambio en los sistemas de numeración posicionales el valor de una cifra depende del lugar que ésta ocupe dentro del número. Los sistemas decimal, hexadecimal, octal y binario son ejemplos de sistemas de numeración posicionales. En el número decimal 233 el dígito 3 figura dos veces, pero el de la derecha representa 3 unidades mientras que el de la izquierda representa dos decenas. Generalizando, en un sistema de numeración posicional de base b, la representación de un número se define a partir de la regla: (… a3 a2 a1 a0.a-1 a-2 a-3 …)b = … + a2 b2 + a1 b1 + a0 b0 + a-1 b-1 + a-2 b-2 + a-3 b-3 + … Ejemplo: El número 6923,72 puede obtenerse como la suma: 6000 900 20 3 0.7 0.02 ----------6923.72 unidades de mil centenas decenas unidades décimas centémimas Es decir, 6923.72 = 6*103+9*102+2*101+3*100+7*10-1+2*10-2 Nótese que cuando b es diez y los ai se eligen del conjunto de dígitos ( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ), pero cuando el sistema es base x se eligen dígitos del conjunto comprendido entre 0 y x-1. El punto que aparece entre los dígitos a0 y a-1 se denomina punto fraccionario. Cuando b es 10 se lo llama punto decimal y cuando b es 2, punto binario. Ejemplos en otras bases (423.1)6 = 4×62 + 2×61 + 3×60 + 1×6-1 (427.2)8 = 4×82 + 2×81 + 3×70 + 2×8-1 (101.1)2 = 1×22 + 0×21 + 1×20 + 1×2-1 (923.1)10 = 9×102 + 2×101 + 3×100 + 1×10-1 = (159.17)10 = (279.25)10 = (5.5)10 = (923.1)10 2.3 Sistemas de numeración usuales en informática 2.3.1 Hexadecimal: se compone de 16 dígitos, siendo estos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F Para pasar una cifra expresada en hexadecimal a decimal hay que aplicarle la fórmula de ponderación, como se ve en el ejemplo siguiente: (1AC05.B)16 a decimal: 1*164 + 10*163 + 12*162 + 0*161 + 5*160 + 11*16-1 = (109573.69)10 2.3.3 Binario: Es el sistema de numeración con que operan internamente las computadoras digitales. Se compone de 2 dígitos, siendo estos: 0, 1. A cada dígito se lo denomina bit. (101.01)2 a decimal: 1*22 + 0*21 + 1*20 + 0*2-1 + 1*2-2 = (5.25)10 Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Binario 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Hexadecimal 0 1 2 3 4 5 6 7 8 9 A B C D E F Tabla de equivalencias de cifras entre sistemas 2.7 La información y su representación Los datos son conjuntos de símbolos utilizados para expresar o representar un valor numérico, un hecho, un objeto o una idea en la forma adecuada para ser tratado. Un dato es cualquier objeto manipulable por la computadora. Los datos pueden ser: Adquiridos directamente por la computadora, como sería, por ejemplo, la detección electrónica de temperatura o de una presión excesiva. Aportados por el usuario en forma de caracteres, es decir con letras, números, caracteres especiales (símbolos ortográficos, aritméticos y otros). La codificación es una operación de transformación que representa los elementos de un conjunto mediante los de otro, de forma que a cada elemento del primer conjunto le corresponde un único elemento del segundo. La información representada en un alfabeto de entrada debe ser transformada (codificada) a un alfabeto de salida que entienda el computador. La codificación debe realizarse de manera que a cada elemento del primer alfabeto le corresponda un elemento distinto del segundo. Inform ación (alfabeto de entrada) Sis te m a de Codificación Inform ación codificada (alfabeto de salida) Todo sistema de codificación lleva consigo un código que se define como la ley de correspondencia biunívoca entre los datos que se van a representar y su codificación. Humanos ASCII A 65 M 77 N 78 8 56 = 61 Algunas de las características de un código es el conjunto de caracteres y el número de bits que se utilizan para codificar un carácter (longitud del código). El número máximo del conjunto de carácteres que podemos representar es longitud. En el interior de la computadora la información se almacena y se transfiere de un lugar a otro en forma codificada. El código utilizado usa sólo dos valores (código binario) representados por 0 y 1. En la entrada y la salida de la computadora se efectúan automáticamente los cambios de códigos para que en el exterior la información sea directamente entendida por el usuario. La unidad más elemental de información en un ordenador es un valor binario, un cero o un uno, un bit. Un bit es una posición de memoria que toma el valor 0 o 1. Así pues, la mínima unidad de información en el interior de una computadora es el bit. La información se representa por medio de caracteres (letras mayúsculas y minúsculas, números, caracteres de puntuación y especiales). Pero la computadora sólo entiende secuencias binarias, así que dicha información debe codificarse internamente en notación binaria (en bits). Por lo tanto, a cada carácter le corresponderá cierto número de bits: una serie de bits distinta. Un byte es el mínimo número de bits necesarios para almacenar o representar un carácter en una memoria de computadora (es la menor cantidad de información direccionable sobre una memoria). Un byte suele corresponder a 8 bits. La capacidad de almacenamiento de una computadora o de un soporte de información (disco rígido, CDROM, etc) se mide en bytes, pero suele utilizarse múltiplos: 1 kilobyte 1 megabyte 1 gigabyte 1 terabyte = 1 KB = 1 MB = 1 GB = 1 TB = 210 Bytes = 210 KBytes = 210 MBytes = 210 GBytes = 1024 Bytes = 1024 KBytes = 1024 MBytes = 1024 GBytes = 10241 bytes = 1.048.576 bytes = 1.073.741.824 bytes = 10244 bytes La información que se brinda a la computadora es en la forma normal que usan los seres humanos, es decir, con la ayuda de un alfabeto o conjunto de símbolos (caracteres). Los caracteres de texto son los siguientes: a) Alfanuméricos: a.1) Alfabéticos: A B C ...Y Z a b c ... y z a.2) Numéricos: 0 1 2 3 4 5 6 7 8 9 b) Especiales (ortográficos, aritméticos y otros) ( ) , * / ; : + Ñ ñ = ! ? . » “ & > # < [ Ç ç ] sp Para representar cualquier carácter en el interior de una computadora, es decir, para realizar la conversión o transformación anterior, se utiliza un alfabeto, como por ejemplo el BAUDOT, EBCDIC, ASCII. Tales alfabetos asocian a cada carácter una determinada combinación de bits. 2.7.3 El código ASCII El código ASCII (American Standard Code for Information Interchange), fue establecido por el Instituto Nacional Americano de Estándares (ANSI). Es un código de 7 bits (que permite codificar 2^7 = 128 caracteres) que ha sido muy aceptado y es ahora de uso general; y en algunos casos se ha convertido en un código de 8 bits mediante la adición de un dígito de paridad. Existen varios caracteres del código ASCII, llamados caracteres de control, que tienen significados especiales. Se usan para transmisiones de datos en serie de una máquina a otra e indican cosas como fin de línea, avance de carro, etc. Oct Dec 0 0 01 1 02 2 03 3 04 4 05 5 06 6 07 7 010 8 011 9 012 10 013 11 014 12 015 13 016 14 017 15 020 16 021 17 022 18 023 19 024 20 025 21 026 22 027 23 030 24 031 25 032 26 033 27 034 28 035 29 036 30 037 31 040 32 041 33 042 34 043 35 044 36 045 37 046 38 047 39 050 40 051 41 052 42 053 43 054 44 055 45 056 46 057 47 060 48 061 49 062 50 063 51 064 52 065 53 066 54 067 55 070 56 071 57 Hex Caracter 0x00 NUL \0 0x01 SOH 0x02 STX 0x03 ETX 0x04 EOT 0x05 ENQ 0x06 ACK 0x07 BEL 0x08 BS \b 0x09 HT \t 0x0A LF \n 0x0B VT 0x0C FF \f 0x0D CR \r 0x0E SO 0x0F SI 0x10 DLE 0x11 DC1 0x12 DC2 0x13 DC3 0x14 DC4 0x15 NAK 0x16 SYN 0x17 ETB 0x18 CAN 0x19 EM 0x1A SUB 0x1B ESC 0x1C FS 0x1D GS 0x1E RS 0x1F US 0x20 SPACE 0x21 ! 0x22 " 0x23 # 0x24 $ 0x25 % 0x26 & 0x27 ' 0x28 ( 0x29 ) 0x2A * 0x2B + 0x2C , 0x2D 0x2E . 0x2F / 0x30 0 0x31 1 0x32 2 0x33 3 0x34 4 0x35 5 0x36 6 0x37 7 0x38 8 0x39 9 Oct 0100 0101 0102 0103 0104 0105 0106 0107 0110 0111 0112 0113 0114 0115 0116 0117 0120 0121 0122 0123 0124 0125 0126 0127 0130 0131 0132 0133 0134 0135 0136 0137 0140 0141 0142 0143 0144 0145 0146 0147 0150 0151 0152 0153 0154 0155 0156 0157 0160 0161 0162 0163 0164 0165 0166 0167 0170 0171 Dec 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 Hex Caracter 0x40 @ 0x41 A 0x42 B 0x43 C 0x44 D 0x45 E 0x46 F 0x47 G 0x48 H 0x49 I 0x4A J 0x4B K 0x4C L 0x4D M 0x4E N 0x4F O 0x50 P 0x51 Q 0x52 R 0x53 S 0x54 T 0x55 U 0x56 V 0x57 W 0x58 X 0x59 Y 0x5A Z 0x5B [ 0x5C \ 0x5D ] 0x5E ^ 0x5F _ 0x60 ` 0x61 a 0x62 b 0x63 c 0x64 d 0x65 e 0x66 f 0x67 g 0x68 h 0x69 i 0x6A j 0x6B k 0x6C l 0x6D m 0x6E n 0x6F o 0x70 p 0x71 q 0x72 r 0x73 s 0x74 t 0x75 u 0x76 v 0x77 w 0x78 x 0x79 y 072 073 074 075 076 077 58 59 60 61 62 63 0x3A 0x3B 0x3C 0x3D 0x3E 0x3F : ; < = > ? 0172 0173 0174 0175 0176 0177 122 123 124 125 126 127 0x7A 0x7B 0x7C 0x7D 0x7E 0x7F z { | } ~ DEL En una cadena de caracteres cada carácter ocupa 1 byte y se representa según el código de caracteres que se esté utilizando (ASCII o EBCDIC). La cadena de caracteres de 4 bytes 48 4E 4C 41 representa, según la tabla de códigos ASCII, a la cadena "HOLA."