Download Capítulo 2

Document related concepts

Precisión simple en coma flotante wikipedia , lookup

Coma flotante wikipedia , lookup

Representación de números con signo wikipedia , lookup

Bit wikipedia , lookup

Sistema octal wikipedia , lookup

Transcript
Capítulo 2. La información y su representación.
1. Introducción
2. Representación numérica.
2.1. Sistemas de numeración.
2.1.1. Definición de sistema de numeración.
2.1.2. Sistema decimal.
2.1.3. Teorema fundamental de la numeración.
2.1.4. Sistema binario. Bit, byte y palabra. Suma binaria.
2.1.5. Sistema octal.
2.1.6. Sistema hexadecimal.
2.1.7. Conversiones entre sistemas.
2.2. Representación interna de números enteros. Coma fija.
2.2.1. Módulo y signo.
2.2.2. Complemento a 1.
2.2.3. Complemento a 2.
2.2.4. Exceso a 2n-1.
2.3. Representación interna de números reales. Coma flotante.
3. Representación alfanumérica.
3.1. Código ASCII.
3.2. Código EBCDIC.
1. Introducción.
Cualquier información que se desee manejarse con la computadora
debe estar en sistema binario, es decir debe representarse a base de ceros y
unos, ya que los circuitos electrónicos que forman una computadora sólo
reconocen dos estados, a uno le asignan un 0 y a otro un 1. Dentro del
ordenador, en cualquier punto de un circuito se puede distinguir entre presencia
de tensión o ausencia de tensión. Si se asigna el 1 a la presencia de tensión y
el 0 a la ausencia se dice que se está utilizando lógica positiva. En caso
contrario se trata de lógica negativa.
2. Representación numérica.
2.1. Sistemas de numeración.
2.1.1. Definición de sistema de numeración.
Un sistema de numeración es un conjunto de símbolos y reglas para
combinar dichos símbolos, que serán utilizados para representar datos
numéricos, o sea cantidades.
Se denomina base de un sistema de numeración al número de símbolos
que emplea. Se suele utilizar la notación:
Número en base B  N(B
Un sistema de numeración es posicional cuando el valor de cada dígito
depende de la posición que ocupe respecto a la coma decimal.
Ej. Un mismo dígito puede tener distintos valores:
51.3
 El dígito 5 representa la cantidad 50 por su posición.
510.3  El dígito 5 representa la cantidad 500 por su posición.
Un valor cualquiera se puede representar en un sistema posicional con
base B de la forma siguiente:
Dn...D1D0.D-1D-2...(B
2.1.2. Sistema decimal.
El sistema decimal es el que utilizamos para contar desde hace muchos
años. Es un sistema posicional y de base 10, ya que utiliza 10 símbolos que
son: 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9.
El rango de cantidades que se puede representar depende del número
de dígitos utilizados, concretamente será BNºdígitos, es decir:
-
Con 1 dígito se pueden representar 10 cantidades (10 1 = 10), de la cantidad
0 a la cantidad 9.
-
Con 2 dígitos se pueden representar 100 cantidades (102 = 100), de la
cantidad 00 a la 99.
-
Con 3 dígitos se pueden representar 1000 cantidades (10 3 = 1000), de la
cantidad 000 a la 999. Y así sucesivamente.
2.1.3. Teorema fundamental de la numeración.
Este teorema se utiliza para conocer qué cantidad en sistema decimal
representa un número expresado en otro sistema de numeración posicional. La
fórmula que debe aplicarse es:
Número expresado en sistema con base B:
Dn...D1D0.D-1D-2...(B
Cantidad en decimal que representa ese número:
Dn*Bn + ... + D1*B1 + D0*B0 + D-1*B-1 + D-2*B-2...
Ej. El número 201.1(3 representa la cantidad 19.33:
201.1(3 = 2*32 + 0*31 + 1*30 + 1*3-1 = 19.33(10
2.1.4. Sistema binario. Bit, byte y palabra. Suma binaria.
El sistema binario es el que emplean internamente los circuitos de la
computadora. Este sistema tiene base 2, utilizando los símbolos 0 y 1. Cada
dígito se llama bit (binary digit) y se definen los siguientes grupos de bits:
-
Byte: conjunto de 8 bits.
Kilobyte (Kb): conjunto de 1024 bytes (1024 * 8 bits).
Megabyte (Mb): conjunto de 1024 Kb (1024*1024*8 bits).
Gigabyte (Gb): conjunto de 1024 Mb.
Terabyte (Tb): conjunto de 1024 Gb.
Se define palabra como el número de bits para el que ha sido diseñada
una computadora, por ejemplo existen procesadores cuya palabra consta de 64
bits.
En lugar de 1000 para la cantidad kilo se utiliza 1024 por motivos de
diseño electrónico de los dispositivos, que almacenan la información en
potencias de 2, siendo la potencia de 2 más cercana a 1000 la 1024 (210).
En el sistema binario existen los siguientes rangos:
-
Con 1 dígito se pueden representar 2 cantidades (2 1 = 2), que son la
cantidad 0 y la cantidad 1.
-
Con 2 dígitos se pueden representar 4 cantidades (22 = 4), que son:
Binario
00
01
10
11
Decimal
0
1
2
3
-
Con 3 dígitos se pueden representar 8 cantidades (23 = 8), que son:
Binario
000
001
010
011
100
101
110
111
-
Decimal
0
1
2
3
4
5
6
7
Con 4 dígitos se pueden representar 16 cantidades (24 = 16), que son:
Binario
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Decimal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
La suma binaria es análoga a la decimal, teniendo en cuenta la tabla
siguiente:
0+0=0
0+1=1
1+0=1
1 + 1 = 0 (con acarreo de 1)
Ej.
100101
+ 10111
111100
2.1.5. Sistema octal.
Este sistema es de base 8, utilizando los símbolos 0, 1, 2, 3, 4, 5, 6 y 7.
Con un dígito se pueden representar 8 cantidades (de 0 a 7), con 2 dígitos 64
cantidades (de 00 a 77, que en decimal son de 0 a 63) y así sucesivamente.
2.1.6. Sistema hexadecimal.
Este sistema es de base 16, utilizando los símbolos:
0 1 2 3 4 5 6 7 8 9 A B C D E F
donde el valor de las letras es el siguiente:
A
B
C
D
E
F
-
10
11
12
13
14
15
2.1.7. Conversiones entre sistemas.
Para convertir un número de cualquier sistema al sistema decimal se
utilizará el teorema fundamental de la numeración citado anteriormente.
Ej. A4.2(16 a decimal:
A4.2(16 = 10*161 + 4*160 + 2*16-1 = 164.125(10
Ej. 1101(2 a decimal:
1101(2 = 1*23 + 1*22 + 0*21 + 1*20 = 13(10
Para convertir un número decimal a binario se puede utilizar el método
de las divisiones sucesivas hasta que el cociente sea 0, cogiendo los restos en
orden inverso.
Ej. 13(10 a binario:
13 / 2 = 6 / 2 = 3 / 2 = 1 / 2 = 0 (el cociente es 0)
Restos: 1
0
1
1
Cogiendo los restos en orden inverso queda: 13(10 = 1101(2
Para pasar los decimales (dígitos a la derecha del punto decimal) del
sistema decimal a binario se utiliza el método de los productos sucesivos por 2,
cogiendo las partes enteras en orden directo. Se multiplicará por 2 sólo la parte
decimal (quitando la parte entera) resultante del producto anterior. Se realizan
productos hasta que la parte decimal resulte 0 o hasta que se obtenga la
precisión deseada.
Ej. 0.333(10 a binario:
0.333 * 2 = 0.666 (la parte entera es 0, la parte decimal es .666)
0.666 * 2 = 1.332 (la parte entera es 1, la parte decimal es .332)
0.332 * 2 = 0.664 (la parte entera es 0, la parte decimal es .664)
0.664 * 2 = 1.328 (la parte entera es 1, la parte decimal es .328)
………………….
(se sigue multiplicando hasta que el error sea menor que el deseado)
Por tanto: 0.333(10 = 0.0101...(2
Para pasar un número del sistema hexadecimal a binario, se escribe
cada dígito con 4 bits, según la tabla siguiente:
Hexadecimal
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Binario
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Ej. A3.C(16 a binario:
A3.C(16 = 1010 0110.1100(2
Para pasar un número del sistema binario al hexadecimal, se cogen
grupos de 4 bits, desde el punto decimal hacia los extremos, rellenando con
ceros en los extremos si es necesario para completar los 4 bits del último
grupo. A cada grupo se aplicará la correspondencia según la tabla anterior.
Ej. 101010 0110.110011(2 a hexadecimal:
101010 0110.110011
Después de rellenar con ceros: 00101010 0110.11001100
Resultando: 2 A
6 . C C(16
Para pasar un número del sistema octal a binario, se escribe cada dígito
con 3 bits, según la tabla siguiente:
Octal
0
1
2
3
4
5
6
7
Binario
000
001
010
011
100
101
110
111
Ej. 72.5(8 a binario:
72.5(8 = 111 010.101(2
Para pasar un número del sistema binario a octal, se cogen grupos de 3
bits, desde el punto decimal hacia los extremos, rellenando con ceros en los
extremos si es necesario para completar los 3 bits del último grupo. A cada
grupo se aplicará la correspondencia según la tabla anterior.
Ej. 10110110.10101(2 a octal:
Después de rellenar con ceros:
Resultando:
10110110.10101
010110110.101010
2 6 6 . 5 2(8
Para pasar un número del sistema decimal al sistema hexadecimal u
octal, se realizará convirtiendo previamente al sistema binario como paso
intermedio, para posteriormente pasar del binario al hexadecimal u octal según
se ha explicado.
2.2. Representación interna de números enteros. Coma fija.
Dentro de la computadora, los valores numéricos o cantidades se
representan con bits, en sistema binario. En dicha representación debe
concretarse el número de bits que se van a utilizar para codificar cada cantidad,
además existen distintos tipos de representación, como vamos a ver en este
apartado los tipos para números enteros (sin decimales). Se suelen llamar
representación en coma fija, por suponerse la coma decimal en una posición
fija, a la derecha el número representado.
2.2.1. Módulo y signo.
El bit más a la izquierda representa el signo del número, donde 0 será
positivo y 1 negativo. El resto de bits representa el módulo del número.
Si se utilizan n bits para representar cada cantidad, el rango será el
siguiente:
Desde:
Hasta:
-2n-1 + 1
+2n-1 - 1
Ej. Con n=8 bits:
Rango: de -127 a +127
La cantidad 10 se representa: 0 0001010
La cantidad -10 se representa: 1 0001010
Con este sistema existen 2 representaciones para la cantidad 0:
0 0000000 (+0)
1 0000000 (-0)
2.2.2. Complemento a 1.
Este tipo de representación coincide con la anterior para valores
positivos. Para representar valores negativos, se representará previamente el
correspondiente valor positivo y a continuación se invierten todos los bits. Por
lo tanto los números positivos tendrán el bit más a la izquierda a 0 y los
negativos a 1. El rango coincide con el caso anterior, siendo con n bits de:
Desde:
Hasta:
-2n-1 + 1
+2n-1 - 1
Ej. Con n=8 bits:
Rango: de -127 a +127
La cantidad 10 se representa: 0 0001010
La cantidad -10 se representa: 1 1110101
Con este sistema existen también 2 representaciones para la cantidad 0:
0 0000000 (+0)
1 1111111 (-0)
2.2.3. Complemento a 2.
Este tipo de representación coincide con las anteriores para valores
positivos. Para representar valores negativos, se representará previamente el
correspondiente valor positivo, a continuación se invierten todos los bits y
finalmente se le suma 1 al bit más a la derecha. Por lo tanto los números
positivos tendrán el bit más a la izquierda a 0 y los negativos a 1. El rango en
este caso alcanza un número negativo más que en las representaciones
anteriores, siendo con n bits de:
Desde:
Hasta:
-2n-1
+2n-1 - 1
Ej. Con n=8 bits:
Rango: de -128 a +127
La cantidad 10 se representa: 0 0001010
La cantidad -10 se representa: 1 1110101
+
1
1 1110110
Con este sistema existe sólo 1 representación para la cantidad 0:
0 0000000 (+0)
1 1111111
+ 1
1 0 0000000 (-0)
El acarreo (1) se desprecia.
2.2.4. Exceso a 2n-1.
Este tipo de representación consiste en sumar el exceso (2 n-1) al número
que se desea representar, pasándolo a continuación a binario con el número de
bits que se vaya a utilizar. En este caso los números positivos tendrán el bit
más a la izquierda a 1 y los negativos a 0, por tanto es al contrario que en los
casos anteriores. El rango coincide con el visto en la representación en
complemento a 2, alcanzando un número negativo más que positivo, siendo
con n bits de:
Desde:
Hasta:
-2n-1
+2n-1 - 1
Ej. Con n=8 bits, el exceso es de 27, o sea de 128, que es la cantidad que debe
sumarse a cada número a representar:
Rango: de -128 a +127
La cantidad 10 se representa: 10+128 = 138 = 1 0001010
La cantidad -10 se representa: -10+128 = 118 = 0 1110110
Con este sistema existe sólo 1 representación para la cantidad 0:
0 + 128 = 128 = 1 0000000 (+0)
-0 + 128 = 128 = 1 0000000 (-0)
2.3. Representación interna de números reales. Coma flotante.
Las representaciones anteriores, de coma fija, se utilizan para codificar
valores enteros. Vamos a ver ahora la representación de valores con
decimales, que se denomina en coma flotante.
Para representar en coma flotante debe conocerse primero la notación
científica normalizada, que consiste en representar una cantidad con la parte
entera a 0, el primer dígito significativo distinto de cero debe ser justo el que
está a la derecha del punto decimal y debe multiplicase por la potencia de 10
necesaria para que se corresponda con el valor original.
Ej. 835.4 = 0.835 * 103
El 0.835 se llama mantisa.
El 10 es la base.
El 3 es el exponente.
Para representar internamente en la computadora la base suele ser 2,
por lo que la cantidad deberá expresarse en notación científica con base 2, en
lugar de base 10. Este paso se realizará dividiendo el número entre 2 tantas
veces como sea necesario hasta que la parte entera sea 0 y el primer dígito
distinto de cero sea el que está a la derecha del punto decimal. El número de
veces indicará el exponente de la base 2. En caso de que el valor original no
tenga parte entera, sino sólo decimales, en lugar de dividir por 2 se debe
multiplicar por 2 tantas veces como sea necesario hasta conseguir lo mismo
que en el caso anterior, siendo ahora el exponente de 2 negativo.
Ej. 12 en notación científica normalizada con base 2:
12 / 2 = 6 / 2 = 3 / 2 = 1.5 / 2 = 0.75 (se ha dividido 4 veces)
12 = 0.75 * 24
Mantisa=0.75 Base=2
Exponente=4
Ej. 0.0273 en notación científica normalizada con base 2:
0.0273 * 2 = 0.0546 * 2 = 0.1092 (se ha multiplicado 2 veces)
0.0273 = 0.1092 * 2-2
Mantisa=0.1092 Base=2
Exponente=-2
Al pasar la mantisa de decimal a binario, podría quedar el primer bit a la
derecha del punto decimal a 0, con lo que ya no sería notación científica
normalizada. Para corregirlo, simplemente se desplazan todos los bits a la
izquierda y se resta 1 al exponente.
Ej. Al pasar a binario puede quedar: 0.0101*2 3, que debe pasarse a notación
científica normalizada:
0.0101*23 = 0.101*22
Para representar cada parte del número se utilizan las representaciones
de coma fija ya comentadas. Para la mantisa se suele utilizar una de las 3
siguientes: módulo y signo; complemento a 1; o complemento a 2. Para el
exponente se suele utilizar una de las dos siguientes: módulo y signo; o exceso
a 2n-1. La base no se representa, ya que el procesador se diseña para una base
determinada (que suele ser 2), por lo que se da por conocida.
En coma flotante se suelen usar dos tipos de representaciones:
-
Simple precisión, utiliza 32 bits repartidos de la siguiente manera:
SM
Exponente
bit 31 30
23 22
Mantisa
0
Donde la mantisa ocupa 24 bits, del 0 al 22 y el bit 31 que guarda el
signo de la mantisa. El exponente ocupa 8 bits, del 23 al 30.
-
Doble precisión, utiliza 64 bits repartidos de la siguiente manera:
SM
Exponente
bit 63 62
52 51
Mantisa
0
Donde la mantisa ocupa 53 bits, del 0 al 51 y el bit 63 que guarda el
signo de la mantisa. El exponente ocupa 11 bits, del 52 al 62.
Ej. En simple precisión, con mantisa en complemento a 1 y exponente en
exceso a 2n-1, como n es 8 será exceso a 128.
12(10 = 0.75 * 24
Mantisa=+0.75
Exponente=4
Mantisa:
+0.75 a binario: +0.11
Signo mantisa: positivo, o sea 0.
Como mantisa es positiva, en complemento a 1 no se invierten los bits.
Exponente: 4 + 128 = 132 = 10000100
bit
0
10000100
1100000000…0000
31 30
23 22
0
-12(10 = -0.75 * 24
Mantisa=-0.75
Exponente=4
Mantisa:
-0.75 a binario: -0.11
Signo mantisa: negativo, o sea 1.
Como mantisa es negativa, en complemento a 1 se invierten los bits.
Exponente: 4 + 128 = 132 = 10000100
bit
1
10000100
001111111…1111
31 30
23 22
0
En coma flotante, el rango depende principalmente del número de bits
usados para el exponente. Además la precisión estará limitada a un
determinado número de decimales, en función del número de bits utilizados
para la mantisa.
3. Representación alfanumérica.
Se llama información alfanumérica a aquella que no representa
cantidades o valores numéricos, por ejemplo un nombre, una dirección, etc.,
que pueden estar formados por las letras mayúsculas, las minúsculas, las 9
cifras, los sígnos de puntuación, etc.
Para representar información alfanumérica se han creado códigos, que
asignan a cada carácter alfanumérico una combinación distinta de ceros y
unos.
3.1. Código ASCII.
Este es el código alfanumérico más utilizado. Inicialmente se creó con 7
bits, pero después se expandió hasta los 8 bits, llamándose ASCII extendido.
Puede representar 256 caracteres distintos (28=256). Las correspondencias
son las siguientes:
3.2. Código EBCDIC.
Otro código alfanumérico utilizado es el EBCDIC. Este también emplea 8
bits para codificar cada carácter, por lo que puede representar hasta 256
caracteres distintos.