Download Guía 01: Sistemas Numéricos

Document related concepts

Decimal codificado en binario wikipedia , lookup

Nibble wikipedia , lookup

Coma fija wikipedia , lookup

Ordenador decimal wikipedia , lookup

Coma flotante wikipedia , lookup

Transcript
Guía 01: Sistemas Numéricos
1.1.- Sistemas Numéricos, bases 2, 10 y 16
En los sistemas numéricos posicionales un número se expresa como los dígitos del sistema
multiplicados por la base de dicho sistema elevado a una potencia igual a su posición. De esta manera:
17810 = 1 x 100 + 7 x 10 + 8 x 1 = 1 x 102 + 7 x 101 + 8 x 100
El mismo número expresado en base binaria (base 2):
101100102 = 1x128 + 0x64 + 1x32 + 1x16 + 0x8 + 0x4 + 1x2 + 0x1
= 1x27 + 0x26 + 1x25 + 1x24 + 0x23 + 0x22 + 1x21 + 0x20
Lo mismo en base hexadecimal (base 16):
B2 = B x 16 + 2 x 1 = (11) x 161 + 2 x 160
Como nomenclatura para expresar la cantidad de dígitos que se utilizan para expresar un número y la
base del mismo se utilizará la siguiente notación:
(A, B)
Siendo A la cantidad de dígitos y B la base del sistema; de esta manera:
(8,2) = 8 dígitos en base 2 (00000000 a 11111111)
(16,2) = 16 dígitos en base 2 (0000000000000000 a 1111111111111111)
(3,10) = 3 dígitos en base 10 (000 a 999)
(5,10) = 5 dígitos en base 10 (00000 a 99999)
(2,16) = 2 dígitos en base 16 (00 a FF)
(4,16) = 4 dígitos en base 16 (0000 a FFFF)
En particular para la base 2 se definen el bit (un dígito binario); el nibble (4 bits) y el byte (8 bits o 2
nibbles)
1.2.- Cambio de base
Los distintos cambios de base a utilizar en el curso, junto con sus reglas son los siguientes:
a) 2 a 16: Agrupar los bits de a 4 (1 nibble) empezando por el menos significativo y completando con
ceros
10111012 = 0101
1101 = 5D16
b) 16 a 2: Expresar cada dígito hexadecimal como su equivalente binario
FA8716 = 1111
(F)
1010
1000
(A)
(8)
0111 = 1111 1010 1000 01112
(7)
1
c) 2 a 10: Multiplicar por la base (2) elevada a la potencia correspondiente a la posición:
11012 = 1x23 + 1x22 + 0x21 + 1x20 = 8 + 4 + 0 + 1 = 1310
d) 10 a 2: Dividir por la base (2) y acumular los sucesivos restos (LSB) y el último cociente (MSB)
2310 => 23/2 = 11, resto 1
11/2 = 5, resto 1
5/2 = 2, resto 1
2/2 = 1 (último cociente) y resto 0 => 101112
e) 16 a 10: Multiplicar por la base (16) elevada a la potencia correspondiente a la posición:
8A16 = 8 x 161 + (10) x 160 = 128 + 10 = 13810
f)
10 a 16 Dividir por la base (16) y acumular los sucesivos restos (LSDigit) y el último cociente
(MSDigit)
671310 => 6713/16 = 419, resto 9
419/16 = 26, resto 3
26/16 = 1 (último cociente) y resto 10 => 1A3916
1.3.- Representación de números negativos en base 2 y 16
Para los números negativos utilizamos la convención de representarlos en “complemento a la base”; así
en esta convención un número negativo se representa como la base (número de dígitos utilizados)
menos el número positivo correspondiente. Ejemplo en (8,2):
-7310 => 7310 = 010010012 => 100000000 – 01001001 = 101101112
Otro ejemplo en (2,16):
-10210 => 10210 = 6616 => 100 – 66 = 9A16
La regla práctica para obtener la representación de un número negativo en base 2 es escribir el número
positivo equivalente en binario y, leyéndolo de derecha a izquierda, si el digito es “0”, copiarlo. Cuando
se llega al primer “1” se copia tal cual y a partir de ese dígito invertir los “1” por “0” y viceversa. Ejemplo
en (8,2):
-4710 => 4710 = 001011112 => -4710 = 110100012
1.4.- Rango de representación en distintas bases
El rango de representación depende si los dígitos representan números con signo o sin signo. La forma
genérica para el rango de representación de números sin signo para “n” dígitos en la base “K” es:
2
(n,K) => 0 a (Kn – 1)
Lo mismo para números signados en complemento a la base:
(n,K) => -(Kn-1) a +(Kn-1-1)
1.5.- Operaciones en base 2 de números enteros con y sin signo. Carry y Overflow
Los circuitos digitales que realizan operaciones aritméticas generan dos indicadores al finalizar las
operaciones. Uno de ellos es el indicador de “carry” (“acarreo” – “cy”), que representa el acarreo
generado en el bit mas significativo. Asi en (8,2) el indicador de carry es el acarreo generado durante la
suma de los bits más significativos de los operandos. El significado de este indicador cuando vale “1” en
una suma de números sin signo es mostrar que el resultado no entra en la cantidad de dígitos de la
representación. En una suma (8,2) de números sin signo indicaría que se necesitan más de 8 dígitos
para representar el resultado.
El otro indicador que se genera es el de “overflow” (“desbordamiento” – “ov”), que representa la
operación EXCLUSIVE-OR entre A) los acarreos de la suma de los bits más significativos y B) los
acarreos de la suma de los bits inmediatamente anteriores de ambos operandos. El significado de este
indicador cuando vale “1” en una suma de números con signo es mostrar que el resultado es incorrecto.
En una suma (8,2) de números con signo indicaría, por ejemplo, que la suma de dos números positivos
generó un resultado que representa un número negativo, lo cual es indudablemente incorrecto.
1.6.- Representación de números fraccionarios en base 10 y 2. Representación de punto fijo
La representación de números fraccionarios (sin parte entera) en base 10 se realiza de manera análoga
a lo descrito en la sección 1.1.- Así:
0.37510 = 3x(1/10) + 7x(1/100) + 5x(1/1000)
= 3x10-1 + 7x10-2 + 5x10-3
Cabe destacar que con tres dígitos en base 10 se pueden representar números decimales con una
precisión de un milésimo (1/1000).
Lo mismo en base 2:
0.0112 = 0x(1/2) + 1x(1/4) + 1x(1/8)
= 0x2-1 + 1x2-2 + 1x2-3
= 0.37510
Cabe destacar que con tres dígitos en base 2 se pueden representar números decimales con una
precisión de un octavo (1/8). Compárese con la precisión de tres dígitos en base 2.
3
De esta manera, la representación de punto fijo consiste en utilizar una cierta cantidad de dígitos para la
parte entera y otra cierta cantidad de dígitos para la parte fraccionaria. Por ejemplo si en base 10 se
utilizan 4 dígitos para la parte entera y 4 dígitos para la parte fraccionaria, el rango de números que
puedo representar es 0000.0000 a 9999.9999 y con una precisión de un diezmilésimo (1/10000). La
misma representación en base 2 permitiría representar de 0000.0000 (0.010) a 1111.1111 (15.937510)
con una precisión de un dieciseisavo (1/16 = 2-4).
La ventaja de la representación de punto fijo es que las operaciones de suma y resta se realizan
exactamente igual que las operaciones con enteros, con la salvedad que debe mantenerse siempre la
misma cantidad de dígitos para la parte entera y la parte fraccionaria. La desventaja de esta forma de
representación de números fraccionarios es que para una cierta cantidad de dígitos si se quiere una
buena precisión en la parte fraccionaria, se hace a costa de un rango pequeño para la parte entera.
1.7.- Representación en formato BCD.
El formato BCD (Binary Coded Digit) consiste en utilizar 4 bits para representar los números del 0 al 9
(010 = 00002 y 910 = 10012). Dado que los microcontroladores trabajan en bloques de 8 bits (1 byte), hay
dos representaciones: BCD empaquetado y BCD desempaquetado. La idea del BCD empaquetado es
utilizar 1 byte para representar 2 dígitos BCD, mientras que en BCD desempaquetado se utiliza 1 byte
para cada digito BCD. Ejemplo:
4710 = 0100 0111BCD Empaquetado = 0000 0100 0000 0111BCD Desempaquetado
1.8.- Código ASCII
El código ASCII se utiliza para representar caracteres alfanuméricos en forma binaria/hexadecimal. El
código original utilizaba 7 bits para la representación (128 caracteres) y hay varias extensiones
agregando un bit más (8 bits, 256 caracteres), siendo la más popular y un Standard “de facto” la
propuesta por IBM. El código ASCII representa letras, números y “caracteres no imprimibles” que
realizan distintas funciones, por ejemplo “CR” carriage return (retorno de carro), que se utiliza para ir al
principio del renglón; o “LF” line feed (avance de línea), que se utiliza para pasar al siguiente renglón.
Ejercicios
1.1.- Sistemas Numéricos, bases 2, 10 y 16
Representar los siguientes números en la base y cantidad de dígitos solicitada:
a) 1210 Î (8,2)
b) 1734510 Î (16,2)
c) 13210 Î (2,16)
d) 4795810 Î (4,16)
1.2.- Cambio de base
Realizar los cambios de base entre las bases indicadas y con la cantidad de dígitos solicitados
a) 1001 1110 0111 0110 (16,2) Î (4,16)
4
b) B3FA (4,16) Î (16,2)
c) A02F (4,16) Î (5,10)
d) 63217 (5,10) Î (4,16)
e) 07958 (5,10) Î (16,2)
f)
0110 1000 0101 1100 (16,2) Î (5,10)
1.3.- Representación de números negativos en base 2
Representar los siguientes números negativos en base 10 en complemento a la base 2 ó 16 según
corresponda
a) -1210 Î (8,2)
b) -1734510 Î (16,2)
c) -10710 Î (2,16)
d) -795810 Î (4,16)
1.4.- Rango de representación en distintas bases
Indicar el mayor y menor número representable en las siguientes bases
a) (8,2) sin signo
b) (8,2) con signo
c) (16,2) sin signo
d) (16,2) con signo
e) (2,16) sin signo
f)
(2,16) con signo
g) (4,16) sin signo
h) (4,16) con signo
1.5.- Operaciones en base 2 de números enteros con y sin signo. Carry y Overflow
Realizar las siguientes sumas, dar el valor de los indicadores de carry y overflow, interpretar el resultado
de acuerdo a si la operación es entre enteros sin signo o en representación de complemento a la base.
a) 0011 + 0100
b) 1101 + 1001
c) 0100 + 0101
d) 0101 + 1011
1.6.- Representación de números fraccionarios en base 10 y 2. Representación de punto fijo
Representar los siguientes números considerando 4 digitos para la parte entera y 4 digitos para la parte
fraccionaria en base 2 (indicar si el número tiene representación exacta o aproximada)
a) 12.5
b) 6.99
5
Representar los siguientes números considerando 8 digitos para la parte entera y 8 digitos para la parte
fraccionaria en base 2 (indicar si el número tiene representación exacta o aproximada)
a) 122.694
b) 3.1416
1.7.- Representación en formato BCD.
Representar los siguientes números en base 10 en bcd empaquetado y desempaquetado:
a) 236
b) 27984
1.8.- Código ASCII
Representar lassiguientescadenasde caracteres en código ascii:
a) “Este es un texto en castellano”
b) “ESTA cadena TiEnE 21 lEtRaS”
6