Sistemas de numeración y representación interna
LINK AL CUADERNO CON TODA LA INFORMACIÓN DEL CAPITULO:
Sistemas de numeración y representación interna
Ahora vamos a estudiar un tema nuevo: Representación interna.
Motivación.
Qué es una computadora ?
Las computadoras COMPUTAN. Computar es procesar datos.
Esta proceso tiene siempre la forma Entrada ---- Proceso ---- Salida.
Qué tipos de computadoras conocen ?
PCs de escritorio, PCs tipo gamer, laptops, servidores, celulares, tablets, el módulo de electrónica de: una heladera, un aire acondicionado, las radios de los autos, la inyección electrónica, etc. (a estas últimas se las llama sistemas de tiempo real).
Para este curso nos interesan todas las computadoras anteriores.
Las computadoras son digitales. O sea, no son analógicas (niveles densos de señal).
Digitales----------- niveles discretos de señal ------------------- 0 o 1
En las computadoras todo ocurre en términos de ceros y unos.
En el curso, uno de los objetivos es construir conceptualmente una computadora. Entender sus partes y su funcionamiento.
Las entradas deben ser digitales, es decir, estar escritas en términos de ceros y unos. ESTO MOTIVA NUESTRO PRIMER TEMA, que es REPRESENTACION INTERNA, en el cual describimos los diferentes tipos de datos, en términos de ceros y unos.
Luego vamos a operar con los ceros y unos, y para eso precisamos un álgebra. Y por eso estuvimos estudiando el Algebra de Boole. Luego vimos circuitos, que los asociaremos a funciones del álgebra.
Representación interna.
Vamos a traducir diferentes tipos de datos en términos de ceros y unos, de modo que la computadora los pueda procesar.
- Valores de verdad (V o F)
- Naturales
- Enteros
- Reales
- Chars
- Strings
También son parte de la representación interna las digitalizaciones de imágenes, de sonidos, de video, etc.
Comencemos discutiendo cómo representar valores de verdad
Tomamos una convención: por ejemplo F lo represento como 0 y V lo represento como 1.
U otra convención: por ejemplo F lo represento como 1 y V lo represento como 0.
Cuál es mejor ?
Mientras se pueda ir y volver no hay problema ambas sirven.
Usando la convención número 1: F ---0 V---1 representar F--------------------------------0
Me dan un enunciado y tengo que almacenar, usando la convención anterior, si es V o F:
“2=3” ----------0
“En Uruguay más de un equipo ha logrado la cuarta libertadores” ------------F------------0
Naturales
Cómo puedo representar el número 25 en términos de ceros y unos ?
La única que tenemos de expresar el 25 en términos de ceros y unos va a ser representando en binario.
25d=16+8+1 =11001b
(todavía no expliqué como lo hice!)
LA SOLUCIÓN VA POR ESTE LADO Y POR LO TANTO HAREMOS UN PARENTESIS MATEMATICO DONDE ESTUDIAREMOS COMO PASAR DE UNA BASE A OTRA.
(Luego del paréntesis, volveremos). Esto nos llevará algunas horas de clase…
Sistemas de Numeración
Nos interesan los sistemas de numeración POSICIONALES. En ellos, cada dígito aporta al número representado en función de su ubicación dentro del número.
Por ejemplo los números que usamos habitualmente, usan un sistema posicional, en base 10.
Por ejemplo los números romanos, no usan un sistema de numeración posicional, y no nos interesan.
Por ejemplo cuando decimos
358 d = 8 x 10**0 + 5 x 10**1 + 3 x 10 **2
45,23 d = 3 x 10**(-2) + 2 x 10**(-1) + 5 x 10**0 + 4 x 10**1
Vamos a tener una base y los dígitos van a ir desde 0 hasta el número anterior a la base.
Por ejemplo:
BINARIO, base 2, dígitos {0,1}
OCTAL, base 8, dígitos {0,1,2,3,4,5,6,7}
DECIMAL, base 10, dígitos {0,1,2,3,4,5,6,7,8,9}
HEXADECIMAL, base 16, dígitos {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}
¿ Qué es lo primero que aprendemos en matemática ?
A contar!!!!!!!!
Vamos a contar en distintas bases
| Binario | Base 4 | Base 5 | Octal | Decimal | Hexadecimal |
| 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 | 1 | 1 |
| 10 | 2 | 2 | 2 | 2 | 2 |
| 11 | 3 | 3 | 3 | 3 | 3 |
| 100 | 10 | 4 | 4 | 4 | 4 |
| 101 | 11 | 10 | 5 | 5 | 5 |
| 110 | 12 | 11 | 6 | 6 | 6 |
| 111 | 13 | 12 | 7 | 7 | 7 |
| 1000 | 20 | 13 | 10 | 8 | 8 |
| 1001 | 21 | 14 | 11 | 9 | 9 |
| 1010 | 22 | 20 | 12 | 10 | A |
| 1011 | 23 | 21 | 13 | 11 | B |
| 1100 | 30 | 22 | 14 | 12 | C |
| 1101 | 31 | 23 | 15 | 13 | D |
| 1110 | 32 | 24 | 16 | 14 | E |
| 1111 | 33 | 30 | 17 | 15 | F |
| 10000 | 100 | 31 | 20 | 16 | 10 |
| 10001 | 101 | 32 | 21 | 17 | 11 |
| 10010 | 102 | 33 | 22 | 18 | 12 |
| 10011 | 103 | 34 | 23 | 19 | 13 |
| 10100 | 110 | 40 | 24 | 20 | 14 |
| 10101 | 111 | 41 | 25 | 21 | 15 |
| 10110 | 112 | 42 | 26 | 22 | 16 |
| 10111 | 113 | 43 | 27 | 23 | 17 |
| 11000 | 120 | 44 | 30 | 24 | 18 |
| 11001 | 121 | 100 | 31 | 25 | 19 |
| 11010 | 122 | 101 | 32 | 26 | 1A |
| 11011 | 123 | 102 | 33 | 27 | 1B |
| 11100 | 130 | 103 | 34 | 28 | 1C |
| 11101 | 131 | 104 | 35 | 29 | 1D |
| 11110 | 132 | 110 | 36 | 30 | 1E |
| 11111 | 133 | 111 | 37 | 31 | 1F |
| 100000 | 200 | 112 | 40 | 32 | 20 |
| 100001 | 201 | 113 | 41 | 33 | 21 |
| 100010 | 202 | 114 | 42 | 34 | 22 |
| 100011 | 203 | 120 | 43 | 35 | 23 |
| 100100 | 210 | 121 | 44 | 36 | 24 |
| 100101 | 211 | 122 | 45 | 37 | 25 |
| 100110 | 212 | 123 | 46 | 38 | 26 |
| 100111 | 213 | 124 | 47 | 39 | 27 |
| 101000 | 220 | 130 | 50 | 40 | 28 |
| 101001 | 221 | 131 | 51 | 41 | 29 |
| 101010 | 222 | 132 | 52 | 42 | 2A |
| 101011 | 223 | 133 | 53 | 43 | 2B |
| 101100 | 230 | 134 | 54 | 44 | 2C |
| 101101 | 231 | 140 | 55 | 45 | 2D |
| 101110 | 232 | 141 | 56 | 46 | 2E |
| 101111 | 233 | 142 | 57 | 47 | 2F |
| 110000 | 300 | 143 | 60 | 48 | 30 |
| 110001 | 301 | 144 | 61 | 49 | 31 |
| 110010 | 302 | 200 | 62 | 50 | 32 |
Algunas observaciones:
En binario:
los números pares, terminan en… 0
los números impares, terminan en…. 1
las potencias son de la forma….. 100…0000
los anteriores a las potencias de 2, son de la forma….. 1111…111
Cómo pasar de cualquier base a base 10
123 d = 3 x 10**0 + 2 x 10**1 + 1 x 10**3
101010 b = 0 x 2**0 + 1 x 2**1 + 0 x 2**2 + 1 x 2**3 + 0 x 2**4 + 1 x 2**5 =
Los ceros ya la próxima ni los pongo…
= 2 + 8 + 32 = 42 d
3410 o = 0 x 8**0 + 1 x 8**1 + 4 x 8**2 + 3 x 8**3 = 8 + 4 x 64 + 3 x 8**3 = 8 + 256 + 3 x 512 =776 + 1024 = 1800 d
[ 8**3 = (2**3)**3=2**9=512 ]
CON decimales…
10,11 b = 3+1/2+1/4 = 3,75 d
3,2 o = 3 + 2/8 = 3,25 d
1,AB h = 1 + 10/16 + 11/256
10,01 b = 2 + ¼ =2,25 d
Pasar a base 10
1A,01Bh= 16+10+1/256 + 11/(16**3)d =26+1/256 + 11/4096 d
45,67o= 5 + 4x8 + 6/8 + 7/64 = 37 + ¾ + 7/64 = 37,75 + 7/64 d
Cómo pasar de base 10 a base 2
Forma 1 ( J )
Buscamos las potencias de 2, en forma decreciente, dentro del número.
Ejemplo
1037 d = 1024 + 13 = 1024 + 8 + 5 = 1024 + 8+ 4+ 1=10000001101 b
Forma 2 ( L )

Cómo hacemos con los decimales ?
Acá sí el método 2 gana por destrozo….., multiplicamos por 2
Ejemplo:
Pasar a base 2: 10,75 d
10d=1010b
0,75 d =0,11 b
0,75 x 2 = 1,5
0,5 x 2 = 1,0
Ejemplo:
45,25 d = 101101,01 b
45 = 32 + 8 + 4 +1
0,25 x 2 = 0,5
0,5 x 2 = 1
Pasar a binario el número 2657,5 d = 101001100001,1b
2657= 2048 + 512 + 64 + 32 + 1 =101001100001
0,5d=0,1b
El método de las divisiones funciona para cualquier base, pero solo lo usaremos para pasar a base 2 y luego complementaremos con un truco.
Potencias de 2
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536
Conviene saberlas de memoria…
Pasar a base 2
0,2d =0,0011001100110011… =0,0011
0,2 x 2 = 0,4
0,4 x 2= 0,8
0,8 x 2 = 1,6
0,6 x 2=1,2
0,2………….repite…….. por lo tanto queda decimal periódico y el período, lo que se repite, es
0011001100110011….
Un número como 0,2d quedó con una cantidad finita de dígitos luego de la coma en base 10, y con una cantidad infinita de dígitos después de la coma en base 2.
Otro ejemplo
0,1d=?
0,1 x 2 = 0,2
0,2 lo acabo de hacer…
Entonces 0,1 d = 0,00011
Ejemplos
353d = 256 + 64 + 32 + 1 = 101100001 b
35 d = 32 +2 + 1 = 100011 b

10,5 d = ¿?b
10,75 = ¿?b
10,2 = ¿?b
10,1 = ¿?b
10,12 = ¿?b
Para la parte entera, como siempre: 10 d = 8 + 2 = 1010 b
0,5 d = 0,1 b
0,5 x 2 = 1,0
Y corto porque me dio 0. Entonces 10,5d=1010,1 b
0,75 d = 0,11 b
0,75 x 2 = 1,5
0,5 x 2 = 1,0
Y corto porque me dio 0. Entonces 10,75 d = 1010,11 b
0,2 d = 0,0011 …
0,2 x 2 = 0,4
0,4 x 2 = 0,8
0,8 x 2 = 1,6
0,6 x 2 = 1,2
0,2 x 2……………. Se repite…. Entonces se va a repetir desde 0,2, o sea: 0011
Entonces estamos frente a un decimal, que en base 2, es periódico, y es:
0,2d=0,0011001100110011… b = 0,0011 b
Entonces 10,2d = 1010,0011 b
0,1 d = 0,0…
0,1 x 2 = 0,2 y este es el anterior
Entonces queda: 0,1 d = 0,00011 b El 0 no se subraya porque no es parte del período.
Entonces 10,1 d = 1010,00011 b
Consulta, desarrollo completo de 0,1:
0,1 x 2 = 0,2
0,2 x 2 = 0,4
0,4 x 2 = 0,8
0,8 x 2 = 1,6
0,6 x 2 = 1,2
0,2 x 2 REPETIDO
Entonces
0,1 d = 0,00011001100110011… = 0,00011 b
0,12 d=0,00011………
0,12 d x 2 = 0,24
0,24 x 2 = 0,48
0,48 x 2 = 0,96
0,96 x 2 = 1,92
0,92 x 2 = 1,84
………..sigo hasta cuando ¿?
Entonces 10,12 d = 1010,00011… b
Pero no sé como sigue
Primero: los irracionales, que tienen infinitas cifras después de la coma y en formato aperiódico, se comportarán así en cualquier base. No es el caso de este número, que es un racional: 10,12 d=1012/100, es un racional.
Los racionales, pueden tener un largo fijo de dígitos después de la coma, y en tal caso el método se detiene pues tropieza con un cero.
Pero el segundo caso, pueden ser periódicos. Y no hay otra opción.
En ese caso anterior, nosotros estamos “sacando” números entre 0 y 99:
Salió el 12, 24, 48, 96, 92…. Y estamos esperando que se repitan. Ocurrirá ? Por supuesto, en el peor caso, ocurrirá luego de 100 intentos.
En la práctica, cuando estamos traduciendo estos números, tenemos una cierta cantidad de bits para rellenar. Cuando los relleno, paro ahí, y en todo caso marco avisando que “se ha perdido precisión”.
Por ejemplo si quiero guardar (y esto aún no lo vimos) 0,1 de modo tal que tengo 8 bits para guardar su parte decimal, supongamos, queda así:
0,1d=0,0001100110011…. B
Y si tengo que guardar 8 bits, guardaré los números marcados en rojo: 00011001, avisando que hay error de representación. Es un error habitual y se convive con él, ordenadente.
Y si tuviera que “volver” de ese valor, sería el número 0,00011001 b
El cual si lo vuelvo a base 10, es: 1/16 + 1/32 + 1/256=0,0625+0,03125+0,00390625=0,09765625 d
Y si lo resto de 0,1d , la diferencia es: 0,00234375 , que es la magnitud del error cometido.
Este tipo de errores, que no son de medición (esos también existen) sino que son de representación, ocurren todo el tiempo en informática, pues los R no son representables. Esto a su vez porque ni el infinito ni la densidad (entre 2 reales siempre hay otro real, (a+b)/2), características de los R, son representables en computadoras.
De todos modos vamos a buscarlo en Excel el período.

Y ahí encontramos el período, el cual sabíamos que en 100 intentos a lo más lo íbamos a hallar!
Ejercicio
Pasar el número 67,4 d a binario.
67 d= 64 + 2 + 1 = 1000011 b
0,4 d= 0,0110 b
0,4 x 2 = 0,8
0,8 x 2 = 1,6
0,6 x 2 = 1,2
0,2 x 2 = 0,4
67,4 d = 1000011,0110 b
Pasajes entre bases que son potencia de 2
(OJO esto vale sólo para esas bases)
Como 2**3 = 8 entre OCTAL Y BINARIO tomo de a 3
Como 2**4 = 16 entre HEXADECIMAL Y BINARIO tomo de a 4
Como 2**2 = 4 entre bases 2 y 4 tomo de a 2
Etc
Ejemplos
Pasar el número
345,4 o a binario
345,4 o= 011 100 101,100 b = (elimino ceros a la izquierda del lado entero y ceros a la derecha del lado decimal) = 11100101,1b
Ejercicios:
Pasar el número
AB4,5 h a binario
AB4,5 = 1010 1011 0100 , 0101 b
Pasar el número 101010110100,010100 b a Octal
101010110100,010100 b = 5264,24 o
Pasar el número 1100101,10111 b a hexadecimal
01100101,10111000 b = 65,B8 h
Ejemplo
Pasar el número AB12CD45,11 h a octal
AB12CD45,11 h = 1010 1011 0001 0010 1100 1101 0100 0101, 0001 0001 b =
01010 1011 0001 0010 1100 1101 0100 0101, 0001 00010 b =
= 25304546505,042 o
Verificación, lo volvemos a hexa
25304546505,042 o= 10101011000100101100110101000101,000100010000 b=
= AB12CD45,11 h quedó el mismo número así que OK

Ejercicio
Pasar los siguientes números a las bases 2,8, 10 y 16.
1011,010 b
-235,77 o
128,45 d
-AA54,69 h
E 2 a
1011,01 b = 11,25 d = B,4 h = 13,2 o
-235,77 o =-10011101,111111 b = -9D,FC h = -(13+9*16+15/16+12/256) d
128,45 d = 10000000,011100 b
0,45 x 2 = 0,9
0,9 x 2 = 1,8
0,8 x 2 = 1,6
0,6 x 2 = 1,2
0,2 x 2 = 0,4
0,4 x 2 = 0,8
10000000,011100 b = 10000000,01110011001100110011001100….=
= 200,3463146… o =200,34631 o
10000000,011100 b = 10000000,0111001100110011001100…b =
= 80,7333…. h = 80,73 h
-AA54,69 h = -1010 1010 0101 0100 , 1100 1001 b =
=-125124,622 o = -(4+16x5+2560+16**3x100+6/16+6/256)d
Suma en base 2


AB4,5 h pasarlo a binario.
AB4,5h = 1010 1011 0100, 0101 b
1A,8h = 0001 1010,1000 b = 11010,1 b
11010,1 b = 011010,100b=32,4 o
101010110100,010100 b = 5264,24 o
Ejercicios de repaso de la suma binaria
1010 1010 b + 1111,1111 b =

Nunca podemos sumar números en diferentes bases. Se debe pasar a la misma base.
Siempre es más fácil utilizar la base más grande posible.
Suma en otras bases

Ejercicios
BCD,9981 h + AB94,57Bh =B761,F131h

765,333 o+ 3764,227o = 4751,562o

AB12 h + 543,4o=

2345,6 o + 2345,6 h =

Resta en binario





Ejercicio
456,56d x 10d=4565,6d
-456,56d x 100d=-45656d
-456,56d / 10d=-45,656d
456,56d / 100d=4,5656d
101010,11b x 2d =101010,11b x 10b= 1010101,1b
101010,11b/4d=1010,1011b
1010,1b x 100b=101010b
-AB,45h x 100h=-AB45h
AB45h x 256d=AB4500h
745o x 64d=745o x 100o=74500 o
-33,65o/64d=-0,3365o
-33,657o/100o=-0,33657o
Ejercicios
- Expresar los siguientes números dados en base 10 en base 2 (binario) y 16 (hexadecimal)
- 1234 d = 1024 + 128 + 64 + 16 + 2 = 10011010010 b = 4D2 h
- 32 d = 100000 b = 20 h
- 128 d = 10000000 b = 80 h
- 255 d = 11111111 b = FF h
- 65536 d = 1 0000 0000 0000 0000 b = 10000 h
- 3226 d= 2048 + 1024 + 128 + 16 + 8 + 2 = 1100 1001 1010 b = C9A h
- Realizar las siguientes conversiones entre sistemas numéricos
- 1010 1010b = AA h
- 231o = 10011001 b
- 1A,Fh = 11010,1111 b
- FFh= 1111 1111b
- ABCh = 12+16.11+10.256=12+176+2560=2748 d
- 100 1111 0000b = 16.15+12.256 = 3312 d
Otra forma
1100 1111 0000b= 16+32+64+128+1024+2048=3312d
- 123Fh= 1001000111111 b
- 110011110000 o =1 001 000 000 001 001 001 001 000 000 000 000 b
- 10 111 111b= 277o
- 423o=1 0001 0011b= 113h
- Expresar los siguientes números dados en base 10 en base 2 (binario)
a_ 64,45 d
64,45d=100 0000,011100 b
0,45 x 2 =0,9
0,9 x 2 = 1,8
0,8 x 2 = 1,6
0,6 x 2 = 1,2
0,2 x 2 = 0,4
0,4 x 2 = 0,8
b_ 32,123
32,123d= 100000,0001111100… b
0.123
0.246
0.492
0.984
1.968
1.936
1.872
1.744
1.488
0.976
…
- Sumar los siguientes números expresados en base 2
a_ 11110000 + 1111 = ?
11110000 + 1111 = 11111111 b
b_ 1000111110100000 + 11111111 = ?
1000 1111 1010 0000 b
1111 1111 b
-----------------------------
1001 0000 1001 1111 b
8FA0 h
+ FF h
-------
909F h
5) Restar los siguientes números en base 2.
a_ 1000 1110- 1111 = 111 1111 b

b_1111 1111 1010 0000 – 1010 0000 = 1111 1111 0000 0000 b
c_ 1111 1111 1000 1111 – 1111 1100 = 1111 1110 1001 0011b

6) Sumar los siguientes números expresados en base 16
a_ E + 1 = F
b_ 123 + BC = 1DF h

c_ FF + A = ?

Ejemplos de Multiplicaciones
34d x 10d = 340d
1010 b x 2d = 10100 b
FF h x 16d = FF0 h
FFh x 10h = FF0 h
1,23 d x 100d = 123d
1,23 o x 8d = 12,3o
7) Multiplicar los siguientes números
a_ (1000011)b x (2)d = 10000110 b
d_ (321)h x (16)d = 3210 h
b_ (11100011)b x (2)d =111000110 b
e_ (AB45)h x (10)h = AB450 h
c_ (111001)b x (100)b = 11100100 b
f_ (AB45)h x (256)d = AB4500h
a_ (10010110)b % (2)d = 1001011 b
d_ (123456)h % (10)h = 12345,6 h
b_ (100100110000)b % (4)d = 1001001100 b
e_ (98C3B)h % (10)h = 98C3,B h
c_ (1111011111111101)b % (8)d= 1111011111111,101 b
f_ (437FFF)h % (256)d = 437F,FF h
9) 2345,66o – 777,7 o = 1345,76 o

10) 1101,0111 h – 1101,0111 o = 1101,0111-241,049h= EBF,FC81 h
SI PONEN QUE ESO DA CERO, ARDE TROYA.
1101,0111 o= 1001000001,000001001001 b = 241,049 h

Representación Interna
Representación de Booleanos OK , muy simple.
Representación de NATURALES
Vamos a usar los BITS como unidad de información. Un BIT puede valer 0 o 1.
1 byte = 8 bits
K = 2**10
M = 2**10 K
G = 2**10 M
T = 2**10 G
P = 2**10 T
1 Kbit = 1024 bits
1 Kbyte = 1024 bytes = 1024 x 8 bits
Cuando se discuta una representación, siempre será relativa a una cantidad de BITS.
Por ejemplo: Naturales sobre N bits.
Una representación es una convención, o sea un conjunto de reglas, que acordamos para representar, es decir para hacer corresponder elementos entre dos conjuntos. Es absolutamente arbitraria. Su único requisito de coherencia es poder ir y volver, es decir representar y volver de la representación.
Ejemplo de representación de N sobre 8 bits.
Sea x el número a representar.
(y acá hay que explicar qué hacemos con x para ir desde x a su representación sobre los 8 bits).
Escribimos x en base 2, binario.
Recostamos a la derecha y completamos los 8 bits con 0s a la izquierda, obteniendo la representación del número.
Por ejemplo
El 4d=100b 00000100 esta es su representación.
Esos ceros a la izq importan o no ? SIIIIIIII , son vitales, porque sobre 8 bits tenemos que rellenar los 8 bits.
NO IGUALAR COSAS DE DISTINTO TIPO!
4d esto es un Natural a representar
100b esto es el mismo Natural 4d escrito en base 2 y se cumple 100b=4d
00000100 es una tira de bits, de largo 8, que resulta, bajo la representación anterior, ser la representación del 4d=100b.
NO IGUALO una tira de bits con un Natural. Son elementos de conjuntos diferentes.
Por ejemplo
14,5d en la representación queda representado como: NO ES UN NATURAL, no se representa.
-8d en la representación, queda representado como: NO ES UN NATURAL, no se representa.
0d se representa como 00000000
Cuál es el número más grande que puedo representar:
Queda representado como 11111111
Y este es el 11111111b = 255 = 2**8-1
En general, esta representación sobre n bits tiene rango: 0.. 2**n-1.
MUY IMPORTANTE: Los N no están acotados superiormente, y estás representaciones (todas) lo estarán.
En informática el infinito no podemos capturarlo.
Los N son infinitos y esta representación, cuyo rango vimos, sobre n bits, representa apenas 2**n de esos infinitos N.
Ahora bien, las representaciones son arbitrarias. Podíamos pensar una menos intuitiva.
Representación 2 para N sobre 8 bits
Sea x el número a representar.
Lo escribimos en base 2.
Lo recostamos a la izquierda, como un espejo, y rellenamos con 0s a la derecha.
Por ejemplo el 4d=100b queda: 00100000
El 12d=1100b queda: 00110000
Si me dicen, qué número es el: 00010001 ¿?
Es el 10001000b=128+8=136d
Por ejemplo el 6d=110b queda: 01100000
Qué representación es mejor ?
No hay una mejor que otra, mientras sean biyectivas, permitan ir y volver, todo bien.
Ejemplo 3 de representación de N sobre 8 bits. CON PERDIDA DE PRECISIÓN.
Sea x el número a representar.
Escribimos x en base 2.
Descartamos el bit de más a la derecha.
Rellenamos con 0s a la izq hasta completar 8 bits.
Ejemplo: 4d=100b se representa como:
100b, le podamos el 0 de más a la derecha, quedando 10 y completo con 6 0s a la izq, obteniendo:
00000010 esta es la representación del 4.
Ejemplo:
67d=64+3=1000011b
Podamos y queda el 100001
Y queda: 00100001
Ejemplo
2d=10b
Podamos y queda 1, la representación es 00000001
Ejemplo
66d=64+2=1000010b
Podamos y queda el 100001
Y queda: 00100001
Observación: el 66d y el 67d coinciden en la representación.
Primer asunto: Formalmente no sería válida, porque confunde elementos, por ejemplo: 0 y 1, 2 y 3, … 66 y 67…
Hay alguna ventaja ? SIIIII. Esto representa el doble de números!!!!
Exploremos el rango.
El más chico es 00000000 , que corresponde al 0d y al 1d
El más grande es 11111111, que corresponde a:
111111110b y a 111111111b que son el 510d y 511d respectivamente.
Por lo tanto mi rango ahora es de 0 a 511.
Es cierto que lo logramos a costa de sacrificar precisión, pues cada número se me confunde con el siguiente.
Es la misma cantidad de números, lo cual es razonable, sobre 8 bits yo tengo 256 números, que son las 2**8 combinaciones que puedo hacer de 0 y 1.
Esta representación si bien no es biyectiva, “entrevera en forma controlada” y esto nos permite tener un rango más grande a costa de perder precisión.
En qué nos serviría perder precisión para ganar rango ?
No debemos asustarnos de la pérdida de precisión. Es parte de nuestro mundo. Y es parte del mundo digital.
Por ejemplo, si un carrito en un laboratorio de física, va a pi m/s, en realidad uso un velocímetro de precisión acotada que leerá y digitalizará capaz, 3,1416 m/s y cuando lo vaya a guardar tal vez pierdo precisión y guardo 3,142 m/s y aún me sirve para mi experimento. Me sirve siempre que sepa dónde está el nivel de error. No puedo en este experimento expresar conclusiones con 8 cifras decimales, están contaminadas de error!!!!!
En informática, en especial con los R, que vamos a estudiar, es habitual cometer errores controlados: por medición (le importa desde el punto de vista físico), por digitalización (le importa al electrónico) y por representación (le importa al informático), y el error es la suma de los 3.
Y esto, si se trabaja mal, puede traer consecuencias nefastas.
Ejemplo:
La disciplina que estudia esto es el cálculo numérico.
En qué nos serviría perder precisión para ganar rango ?
Una vez que entendimos que perder precisión es algo habitual en los R, entonces, para ganar rango, nos puede interesar perderla en los N.
Ejercicio
Propón un esquema de representación de Naturales sobre 8 bits, donde el 64000 sea representable.
RESPUESTA NECIA:
00000000 es el 0
11111111 es el 64000
“Y los demás poné como quieras”
Está perfecto.
Reformulación de la letra, a prueba de respuestas necias!:
Propón un esquema de representación de Naturales sobre 8 bits, donde el 64000 sea representable y todos los números entre 0 y 64000 sean representables de alguna forma razonable.
Obviamente hay que perder precisión, porque tenemos 256 posibilidades y 64001 números.
El número 65536=2**16 nos puede ayudar.
65535d =1111111111111111b
O sea que sin perder precisión, necesitaría 16 bits. Pero tengo sólo 8.
Los otros 8 los vamos a lograr perdiendo precisión.
Representación:
Sea x el número a representar.
Lo escribimos en base 2, y descartamos los 8 bits de más a la derecha.
Luego rellenamos con 0s a la izq para lograr 8 bits de largo.
Ejemplo:
32d=100000b se representa como 00000000
32768d=1000000000000000b se representa como 10000000
Vamos al 64000d=32768+16384+8192+4096+2048+512=1111101000000000b
Y se representa como: 11111010
Se pierde una cantidad de precisión! El 0, el 1, … se confunden en el 00000000
0 00000000
….
11111111b
Del 0 al 255 se me confunden con el 0… y así, en tandas de 256.
Otro ejemplo
Dar una representación de N sobre 4 bits donde, perdiendo precisión, el 128 se representable.
128d=10000000b
Precisaría 8 bits, pero tengo 4, entonces vamos a descartar los 4 bits de la derecha.
Representación:
Sea x el número a representar.
Lo escribimos en base 2, y descartamos los 4 bits de la derecha. Luego rellenamos con 0s a la izquierda hasta completar los 4 bits.
128d=10000000b queda 1000
En realidad 1000 es tanto el 128d=10000000b como el 10001111b que es el 128+15=143d
Del 128 al 143 se confunden en el 1000 en esta representación. Hay pérdida de precisión, pero sobre 4 bits logré el rango que me pedían.
Representación de Enteros
Z=N U {-n/n pertenece a N} o sea los Naturales y sus opuestos.
Es un conjunto infinito, no acotado ni superior ni inferiormente.
Vamos a tener varias familias de representaciones:
- Módulo y Signo
- Complemento a 1
- Complemento a 2
- Desplazamiento 2**(n-1)
- Desplazamiento 2**(n-1)-1
Se les podría incorporar la pérdida de precisión, pero no lo haremos, ya quedó entendido eso.
Ahora la gran pregunta es ¿ cómo metemos los negativos en este juego ?
Módulo y signo
Ejemplo de representación en M y S sobre 8 bits.
Sea x el número a representar.
Representamos en base 2, abs(x) (valor absoluto) sobre los 7 bits de la derecha.
Si x >=0 entonces ponemos un 0 en el bit de más a la izq.
Si x<=0 entonces ponemos un 1 en el bit de más a la izq.
Atención: poner 1 para los negativos es tan arbitrario y válido como poner un 0. Recuerden que es un ejemplo.
Atención: Que no sean disjuntas las condiciones del “si”, me genera 2 representaciones para el 0, lo cual es una molestia.
Ejemplo
4d=100b queda 00000100
El -4d=-100b queda 10000100
El 64d=1000000b queda 01000000
El -64d queda 11000000
El número más chico es el -127d = -1111111b que queda representado: 11111111
El número más grande es el 127d=1111111b que queda representado 01111111
El cero queda como 00000000 y el -0=0 queda 10000000
Son el mismo número y me gasto 2 posibilidad en el…
Esto hace que tengamos 256 posibilidades, sobre 8 bits y tengamos 127 positivos, 127 negativos y el 0, que son 255 números.
El que falta, me lo “roba” el doble 0.
Observaciones:
- Doble cero (L)
- Rango simétrico (J)
- No conserva las operaciones (L)
- Obviamente los Z no están acotados y esta representación (y todas) lo están (L)
La conservación de las operaciones, va a ser una propiedad del complemento a 2, que me permitirá sumar como binarios comunes y que se conserve el signo.
Por ejemplo, en la representación anterior.
-4d = -100b 10000100
-5d=-101b 10000101
Los sumo -4d + (-5d) = -9d
Sumemos las representaciones como binarios…
10000100
+ 10000101
00001001 y hay un 1 que se “cayó” (se llama ovf)
Me dio 9, perdió el signo…
No conserva.
O bueno, para que conserve, tengo que hacer la salvedad del signo, manejarlo aparte, en cada caso… y eso complica la algoritmia.
Ejercicio
Si tenemos el módulo y signo sobre 4 bits, completar todas las posibilidades y sus correspondientes.
0000 es el 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 0
1001 -1
1010 -2
1011 -3
1100 -4
1101 -5
1110 -6
1111 -7
Ahí tienen el rango explícitamente, va de -7 a 7.
Estamos con:
Inraestructura àArquitectura àRepresentación Internaà Representación de Enteros
Representación de Enteros, hay 5 familias de representaciones:
- Módulo y Signo
- Complemento a 1
- Complemento a 2
- Exceso 2**(n-1)
- Exceso 2**(n-1)-1
Habíamos visto Módulo y Signo.
Representación de Enteros en Complemento a 1
Ejemplo
Sobre 8 bits
Sea x el número a representar.
Si x >=0 entonces representamos valor absoluto(x) sobre los 8 bits, completando con Ceros a la Izquierda. Observación: el bit de más a la izquierda DEBERÁ quedar en 0.
Si x<=0 entonces representamos valor absoluto(x) sobre los 8 bits, completando con Ceros a la Izquierda. Observación: el bit de más a la izquierda DEBERÁ quedar en 0. (IDENTICO A ANTES) PERO LUEGO, intercambiamos todos los ceros por unos, todos los unos por ceros. Entonces, el bit de más a la izquierda pasará a quedar en 1.
Problema: el cero concuerda con ambas parte de la definición, y tendremos dos representaciones para el cero.
Ejemplo dentro del ejemplo
Representar:
5d=101b……….. 00000101 es su representación.
-5d ………. 00000101 ----- 11111010 es su representación.
0d=0b …………… 00000000 es su representación
También 11111111 es una representación del cero, basada en el “-0”.
67d= 1000011b…………………. 01000011 es la representación del 67d.
-67d………………… 10111100 es su representación.
128d=10000000b no queda representable, pues el bit de más a la izquierda está quedando en 1 y debería estar en 0.
OBSERVACIÓN: El bit de más a la izquierda se comporta como un bit de signo. Pero como consecuencia de la construcción.
OBSERVACIÓN: Los positivos quedan idénticos que en Módulo y Signo.
Rango:
Número más grande: 01111111 ------127d
Número más chico: 10000000 ----- -127d
Rango: -127..127
Doble cero: 00000000 11111111
No conserva las operaciones.
Obviamente es acotada.
Representación de Enteros en Complemento a 2
Ejemplo
Sobre 8 bits
Sea x el número a representar.
Si x >=0 entonces representamos valor absoluto(x) sobre los 8 bits, completando con Ceros a la Izquierda. Observación: el bit de más a la izquierda DEBERÁ quedar en 0.
Si x<0 entonces representamos valor absoluto(x) sobre los 8 bits, completando con Ceros a la Izquierda. Observación: el bit de más a la izquierda DEBERÁ quedar en 0. (IDENTICO A ANTES) PERO LUEGO, intercambiamos todos los ceros por unos, todos los unos por ceros. Y SUMAMOS 1 y descartamos cualquier acarreo que surja más allá de los 8 bits. Entonces, el bit de más a la izquierda pasará a quedar en 1.
Ejemplo dentro del ejemplo
Representar:
5d=101b……….. 00000101 es su representación.
-5d ………. 00000101 ----- 11111011 es su representación.
0d=0b …………… 00000000 es su representación
¿Y cuál será el -0?
Investiguemos:
00000000
11111111
Sumo 1
00000000 y descarté un 1 más a la izquierda. Así que queda el mismo cero.
67d= 1000011b…………………. 01000011 es la representación del 67d.
-67d………………… 10111101 es su representación.
128d=10000000b no queda representable, pues el bit de más a la izquierda está quedando en 1 y debería estar en 0.
Pero, si tengo 127 positivos y 127 negativos, y el 0, son en total, 255. Y el rango me da 256 posibilidades. Falta un número.
El doble cero ya vimos que no es. Así que busquemos en los extremos del rango.
El 128 me quedaría 10000000 negativo, con lo cual no sirve, no es.
¿ El -128 ?
Investiguemos
128…………… 10000000
Cambio 0s con 1s …………….. 01111111
Sumo 1 ……………… 10000000 y empieza con 1, lo cual es coherente para un negativo.
Entonces el 10000000 corresponde al número -128.
Encontramos el número que faltaba!
OBSERVACIÓN: El bit de más a la izquierda se comporta como un bit de signo. Pero como consecuencia de la construcción.
OBSERVACIÓN: Los positivos quedan idénticos que en Módulo y Signo y a complemento a 1.
Rango:
Número más grande: 01111111 ------127d
Número más chico: 10000000 ----- -128d
Rango: -128..127
Único cero: 00000000
SIIIIII conserva las operaciones.
Obviamente es acotada.
Otro ejemplo dentro de la representación ejemplo
84d=64+16+4=1010100b ……. 01010100 es su representación
-84d………….. 01010100……….. 10101011 y sumo 1…. 10101100 es su representación
Otro ejemplo dentro de la representación ejemplo
A qué número corresponden?
00110000 …….. es positivo porque empieza en 0…. 48d es el número al cual corresponde.
11001100…. Es negativo porque empieza en 1. Así que le aplico el método exactamente al revés.
11001100 le resto 1…….. 11001011 y cambio 0s con 1s…. 00110100, que es el número 4+16+32=52. Por lo tanto corresponde al -52.
Vamos a hacer un ejercicio que nos muestra que se conservan las operaciones en esta representación.
Parte 1
En el complemento a 2 sobre 8 bits antes descripto.
Representar los números:
16d: ………… 00010000
-16d: …………….11110000
32d: …………. 00100000
-32d: …………. 11100000
0: ………… 00000000
Vamos a sumar esas tiras de largo 8 bits, como binarios comunes, haciendo:
16d + 32d= tiene que dar 48d
16d -32d= tiene que dar -16d
-16d + 32d=tiene que dar 16d
-16d – 32d=tiene que dar -48d
16d – 16d=tiene que dar 0d
PERO lo vamos a hacer sumando las REPRESENTACIONES.
16+32:
00010000
+ 00100000
00110000
Qué número dio?
ES POSITIVO, empieza en 0, y es 16+32=48, lo que esperaba
16d-32d
00010000
+ 11100000
11110000
Empieza en 1, le resto 1
11101111
Cambio ceros y unos
00010000
Entonces el número es -16, que es lo que buscaba.
-16+32 tiene que dar 16
-16d: …………….11110000
32d: …….………. 00100000
00010000 que es el 16.
-16-32 tiene que dar -48
-16d: …………….11110000
-32d: ..…………. 11100000
11010000
Es negativo, le resto 1
11001111
Cambios ceros y unos
00110000 que es el 48
Con lo cual el número era -48d que es lo que buscaba.
16-16 tiene que dar 0
16d: …….……… 00010000
-16d: …………….11110000
00000000
Dio 0 que es lo que me tenía que dar.
CONCLUSION (no fue una demostración pero mostramos)
SE CONSERVAN LAS OPERACIONES, es decir, la representación de la suma es la suma de la representaciones.
Esta es una muy importante propiedad del complemento a 2.
Me permite sumar o restar usando el mismo circuito de suma.
Representación de Enteros en Desplazamiento o Exceso 2**(n-1)
Igual que en los otros casos, vamos a explicarlo mediante una representación ejemplo.
Ejemplo
Sobre 8 bits
n=8
2**(n-1)=128=D
Sea x el número a representar.
Calculamos x+D=x+128 y lo representamos sobre 8 bits, pasando a binario y recostando a la derecha, rellenando con 0s a la izquierda.
Ejemplo dentro del ejemplo
17d….. 17+128……….. 10010001 es la representación del 17d.
Observación, sumar 128, en un positivo, es lo mismo prender el bit de más a la izquierda.
-17d…. -17+128=111=64+32+15 ……………… 01101111 es la representación del -17d.
Observación, cuando comienza en 0 corresponde a los negativos.
0d…….. 0 +128 ………… 10000000
Número más grande?
Va a quedar representado como 11111111…. 255
255=128+x entonces x=127
Número más chico?
Va a quedar representado como 00000000…. 0
0=128+x entonces x=-128
Rango: -128..127
Hay un único 0
Rango asimétrico
Obviamente acotado
NO conserva las operaciones.
El bit de signo queda cambiado, no vale la pena razonarlo como un un bit de signo.
Representación de Enteros en Desplazamiento o Exceso 2**(n-1)-1
Igual que en los otros casos, vamos a explicarlo mediante una representación ejemplo.
Ejemplo
Sobre 8 bits
n=8
2**(n-1)-1=128-1=127=D
Sea x el número a representar.
Calculamos x+D=x+127 y lo representamos sobre 8 bits, pasando a binario y recostando a la derecha, rellenando con 0s a la izquierda.
Ejemplo dentro del ejemplo
17d….. 17+127=16+128………..10010000 es la representación del 17d.
Observación, sumar 128, en un positivo, es lo mismo prender el bit de más a la izquierda. Para llevarlo a este caso, sumar 127 es lo mismo que sumar 128 y restar 1.
-17d…. -17+127=110=64+32+14 ……………… 01101110 es la representación del -17d.
Observación, cuando comienza en 0 corresponde a los negativos.
0d…….. 0 +127 ………… 01111111
Número más grande?
Va a quedar representado como 11111111…. 255
255=127+x entonces x=128
Número más chico?
Va a quedar representado como 00000000…. 0
0=127+x entonces x=-127
Rango: -127..128
Hay un único 0
Rango asimétrico
Obviamente acotado
NO conserva las operaciones.
El bit de signo queda cambiado, no vale la pena razonarlo como un un bit de signo.
Ventajas de cada una de las representaciones
Módulo y signo………… muy simple
Exceso………… muy rápido de calcular
Complemento a 2…… conserva las operaciones
En el lenguaje de programación, por ejemplo, las variables con tipo Entero deben guardarse en alguno de estos formatos, o en el arbitrario que se elija, pero se debe especificar cual. Por ejemplo el tipo short de Java corresponde a complemento a 2 sobre 8 bits y se mueve en el rango -128..127.
https://stackoverrun.com/es/q/827742
El programador obviamente se abstrae de esto, no le importa.
Uds. pueden hacer programas de test para descubrir los límites de su representación.
Por ejemplo,
Cuál es el entero más grande del tipo int de mi lenguaje de programación ?
Lo salgo a buscar con este programa:
A=1
While (A+1>A)
B=A
A++
End
Print B
Supongamos que está trabajando en complemento a 2 sobre 8 bits. El más grande es 127. Este es 01111111, cuando haga A++, quedará 10000000, lo cual es el -128. Y ahí cortará el while.
Representación de Números Reales.
Hay varias formas de caracterización de los números reales. Lo más común es la teoría axiomática.
Nosotros los vamos a asociar a la recta, no tienen cota superior, ni inferior, y además es un conjunto denso, o sea no es discreto, o sea entre dos R siempre hay otro R ( entre a y b siempre está (a+b)/2 ).
Vamos a usar dos técnicas.
La primera es representación de R en punto fijo. Utiliza la coma fija, es decir, decide una cantidad de bits para la parte Entera y otro tanto para la parte decimal.
Ejemplo
Sobre 16 bits:
- destinamos los primeros 8 bits desde la izquierda a la parte Entera.
- luego los siguientes 8 bits a la parte decimal.
- La parte Entera en módulo y signo (esta elección es arbitraria), tal como vimos en Z.
- La parte decimal, en fracción binaria pura, recostada a la izquierda y rellenando con ceros a la derecha.
En este ejemplo, algunos ejemplos de números concretos:
8d = 1000b queda: 00001000 00000000
-8d queda: 10001000 00000000
0 queda: 00000000 00000000 y también 10000000 00000000
8,5d=1000,1b queda 00001000 10000000
-8,5d queda 10001000 10000000
Me dan 00001000 11000000 quiero saber cuál es…
+1000,11b=8,75d
35,2d= 100011,0011b se representa 00100011 00110011 hay pérdida de precisión.
0,2x2=0,4
0,4x2=0,8
0,8x2=1,6
0,6x2=1,2
-35,2 se representa como 10100011 00110011 y también se pierde precisión.
Cuánto se pierde de precisión ?
Desarmemos el número representado:
00100011 00110011 refiere al número:
35 + 1/8 + 1/16 +1/128 + 1/256 =35,19921875
Por tanto el error cometido en la representación es:
Valor absoluto(35,2-35,19921875)= 0,00078125
Podemos notar que nuestro rango de representación va de:
11111111 11111111 que es el -127+(1/2+1/4+….+1/256)=-127,99609375
Hasta su opuesto 127,99609375
Los números dentro del rango están equiespaciados, a una distancia de…. 1/256
Este 1/256 nos da una medida de la precisión, pues es lo más pequeño que podemos representar.
En punto fijo, la precisión está fija a lo largo de todo el rango.
Observemos:
Precisión = 1/256=0,00390625
Error obtenido en el caso concreto del 35,2 , que tuvimos que tomar las primeras 8 de sus infinitas cifras después de la coma (es periódico)… era 0,00078125
Este error es menor que la precisión. 0,00078125 < 0,00390625
La precisión nos está indicando una cota superior del error cometido al representar.
Esto, en punto flotante es mucho más complejo, porque la precisión no es fija!
El punto fijo no conserva las operaciones.
Representación de Reales en punto flotante.
Para el punto flotante se debe descomponer el número en la siguiente expresión:
x= signo x mantisa x (base ** exponente)
Y entonces la base se deja fija, usualmente es 2.
Por tanto, nos queda:
X= +/- mantisa x 2 **(exponente)
Y en consecuencia el número a representar queda representado por la terna signo, mantisa, exponente.
Por ejemplo:
+32,5d = +100000,1 b = +100000,1 x 2**0=+1000001 x 2**(-1)=+10000,01 x 2**1…
Y así, podríamos seguir, con infinitas alternativas entre mantisa y exponente.
Por tanto, hay muchas parejas de s, m, e que cumplen la igualdad.
Para quedarnos con una, se normaliza, es decir damos una regla de selección de la mantisa. Para así quedarnos con solamente una, entre las infinitas posibilidades.
Esta es, para nuestro caso (y para el estándar que tomaremos) TOMAR LA MANTISA QUE TIENE LA FORMA 1,ALGO.
En el caso del ejemplo +32,5d=+100000,1b=+1,000001 x 2 **5
Y entonces el signo será + , la mantisa será 1,000001 y el exponente será 5.
Los guardamos de acuerdo a las reglas de la representación, que aún no las vimos.
Como las representaciones son arbitrarias, hay , además de la selección de la forma de normalización que acabamos de hacer, muchas formas de guardar signo, exponente y mantisa en una tira de bits.
Al dar la representación de punto flotante, tenemos que seleccionar alguna.
En todas las representaciones anteriores (N, Z, etc) hemos dado ejemplos entre las posibles representaciones.
Para nuestro caso, debemos seleccionar alguna.
Y VAMOS A USAR EL ESTANDAR IEEE 754 para punto flotante.
Un detalle exhaustivo del mismo está en https://es.wikipedia.org/wiki/IEEE_754
Esto escapa a los objetivos del curso, pero lo damos como una referencia hacia un análisis más profundo.
Hay dos precisiones: alta y baja con 64 y 32 bits respectivamente.
Trabajaremos sobre 32 bits.

Esa figura nos muestra cuántos bits vamos a destinar, y en qué orden.
S ------------ 1 si es negativo y 0 si es positivo
Exponente en los 8 bits siguientes.
Mantisa en los 23 bits siguientes.
Nos resta explicar en qué formato representaremos el entero exponente y la mantisa.
MANTISA………….. es de la forma 1,ALGO.
El “1,” no se guarda, ya sé que está. Entonces guardamos el ALGO, que se llama fracción binaria pura, y se guarda recostado a la izquierda, rellenando con ceros a la derecha.
El exponente, se guarda, como entero que es, sobre 8 bits, en exceso 2**(n-1) -1, que es 127.
Vamos a proceder, en el marco del ejemplo, a representar 32,5 en el IEE 754
+32,5=100000,1=100000,1x2**0=1,000001x2**5
Signo …………… 0
Exponente es 5, se representa 5+127 = 4+128 10000100
Mantisa es 1,000001 como no ponemos el 1, queda 000001 y esto va recostado a la izquierda rellenando con ceros a la derecha hasta completar los 23 bits.
S E M
0 10000100 00000100000000000000000
Esta tira de 32 bits representa mi número.
Ejemplo inverso.
Qué número representa, en IEEE 754, la tira:
1 00000001 11 00…0000
Signo –
Exponente es e tal que 127+e=1 por tanto e=-126
Mantisa es 1,1100….0000=1,11
Entonces el número representado por esa tira de de 32 bits es:
-1,11 x 2**(-126).
La precisión en el punto flotante es VARIABLE.
Cerca del cero, los números están muy cercanos, y lejos del cero están cada vez más alejados.
Todo esto conlleva una necesaria manipulación del error de representación que escapa a nuestro curso.
Ejercicio:
Representar en IEEE 754 de precisión simple, el número -65540,2d
65540=65536 + 4 = 10000000000000100
65540,2d=10000000000000100,0011b=1,00000000000001000011 x 2**16
S=1
E… 16+127=15+128 …… 10001111
M….. 00000000000001000011001
Y por tanto el número queda:
1 10001111 00000000000001000011001
Hay pérdida de precisión, pues cortamos los dígitos decimales.
Para saber cuánta, habría que deshacer el número en punto flotante verde, tomar ese número y restarlo, en valor absoluto, de 65540,2.
El representado es 1,00000000000001000011001 x 2**16
El número original es 1,00000000000001000011001100… x 2**16
La diferencia entre ambos es 0,000000000000000000000001001100… x 2**16=
=00000000000000000,00000001001100…
El error cometido lo podemos acotar por 0,0000001 = 2**(-6)=1/64=0,015625d que ojo, no es tan chico….
Ejercicio
Indicar a qué número corresponde, en IEEE 754 de precisión simple, la tira:
0 11100000 11100…..00000
Signo +
Exponente
11100000b=32+64+128=96+128
96+128=127+e
exponente=97
Mantisa = 1,111b
Número = +1,111b x 2**97=(1+1/2+1/4+1/8)x2**97d
La primer representación de punto fijo, parece muy básica… pero controla mejor el error.
En punto flotante, al alejarnos de cero, aparece una pérdida drástica en la precisión… atentos a eso.
En el punto fijo está más controlada.
En la práctica siempre usamos punto flotante pero el tema de la precisión no se debe olvidar.
El punto flotante nos da la flexibilidad de , sobre el mismo tipo de datos (float, doublé, etc) trabajar con números o muy grandes o muy chicos. OJO al mezclarlos.
Dudas:
Representar el 12d = 1100b
Si queremos representarlo en m y s sobre 4 bits. No es representable, y el rango era -7..7
Fin de la parte de representación interna.
Estuvimos viendo cómo representar los diferentes tipos de datos, en términos de 0 y 1. El resto de los tipos de datos se resuelve en forma análoga.
Los caracteres, se llevan por medio de una tabla, a una correspondencia biyectiva con los naturales, con lo cual se representa el Natural correspondiente. Esto es por ejemplo la tabla ASCII o el código EBCDIC, etc.
Los strings implican poner uno a continuación de otro, una serie de caracteres. Y se representan poniendo una a continuación de otra, sus respectivas representaciones, con un carácter especial para terminar, o con un largo preanunciado.
Por ejemplo: HOLA…………….. HOLA/0 o si no: 4,HOLA
.png)
.png)
No hay comentarios:
Publicar un comentario