Slides sobre números binarios y representación de datos en memoria

Anuncio
Introducción a la Programación
11‐O
Humberto Cervantes Maceda
Recordando
En la sesión anterior vimos que la información almacenada en la memoria, y por lo tanto aquella que procesa la unidad central de procesamiento está almacenada como unos y ceros
100100011101101010010011001
Memoria
Microprocesador
Disco duro
Bits
Los unos y ceros se conocen como “bits” (digitos binarios)
Patrones de bits son usados para representar valores numéricos así como otros símbolos tales como caracteres y signos, o bien imágenes y sonidos
El sistema binario es un sistema de numeración en base 2
Operaciones booleanas
Es conveniente considerar al bit 0 como una representación de falso y al bit 1 como una representación de verdadero
Las operaciones que manipulan valores de verdadero y falso son llamadas operaciones booleanas
En honor a George Boole (1815 – 1864), pionero de la lógica
Tres operaciones booleanas básicas son: Y (AND), O (OR), O exclusivo (XOR) y NO
Operación Y
La operación booleana Y (&&) esta diseñada para reflejar si una sentencia compuesta por otras dos sentencias más simples es verdadera o falsa
P Y Q, donde P y Q son sentencias
Ej.
La UAM es una universidad Y La UAM está en la ciudad de México
P Y Q es verdadero si y sólo si P es verdadero y Q es verdadero
0 Y 0 ?
0 Y 1 ?
1 Y 0 ?
1 Y 1 ?
Operación Y
La operación booleana Y (&&) esta diseñada para reflejar si una sentencia compuesta por otras dos sentencias más simples es verdadera o falsa
P Y Q, donde P y Q son sentencias
Ej.
La UAM es una universidad Y La UAM está en la ciudad de México
P Y Q es verdadero si y sólo si P es verdadero y Q es verdadero
0 Y 0 → 0
0 Y 1 → 0
1 Y 0 → 0
1 Y 1 → 1
Operación O
La operación booleana O (||) de manera similar está basada en sentencias compuestas de la forma
P O Q
Ej.
Hoy es Martes O Hoy es Viernes
P O Q es verdadero si al menos una de las sentencias es verdadera
0 O 0 ?
0 O 1 ?
1 O 0 ?
1 O 1 ?
Operación O
La operación booleana O (||) de manera similar está basada en sentencias compuestas de la forma
P O Q
Ej.
Hoy es Martes O Hoy es Viernes
P O Q es verdadero si al menos una de las sentencias es verdadera
0 O 0 → 0
0 O 1 → 1
1 O 0 → 1
1 O 1 → 1
Operación O exclusivo
La operación booleana O exclusivo permite expresar sentencias del tipo “Ya sea P verdadero o Q verdadero pero no ambas”
P XOR Q
P XOR Q es verdadero si P verdadero o Q verdadero pero no ambas
0 XOR 0 ?
0 XOR 1 ?
1 XOR 0 ?
1 XOR 1 ?
Operación O exclusivo
La operación booleana O exclusivo permite expresar sentencias del tipo “Ya sea P verdadero o Q verdadero pero no ambas”
P XOR Q
P XOR Q es verdadero si P verdadero o Q verdadero pero no ambas
0 XOR 0 → 0
0 XOR 1 → 1
1 XOR 0 → 1
1 XOR 1 → 0
Operación NO
La operación No (!) es otra operación booleana que difiere de las anteriores pues sólo tiene una entrada. La salida es el opuesto de la entrada
NO 1 → 0
NO 0 → 1
Ej. Pedro es un estudiante
Pedro no es un estudiante
De binario a decimal
Un número binario está representado por una secuencia de varios bits
Comúnmente un número de 8 bits se conoce como un byte
Ej. 01101110, 01010101, 11100010
Ejemplo de conversión binario a decimal
2^7 2^62^5 2^4 2^3 2^2 2^1 2^0
Notación hexadecimal
La notación hexadecimal permite representar patrones de 4 bits con un solo símbolo
0000 → 0
0001 → 1
0010 → 2
0011 → 3
0100 → 4
0101 → 5
0110 → 6
0111 → 7
1000 → 8
1001 → 9 1010 → A
1011 → B
1100 → C
1101 → D
1110 → E
1111 → F
Almacenamiento en memoria
La memoria de la computadora está organizada en celdas, y un tamaño típico de una celda es un byte
Bit más significativo
Bit menos significativo
1 Kilobyte = 1024 bytes
Representación de datos en memoria
La información está codificada en la memoria como patrones de bits. Texto
Datos numéricos
Imágenes
Sonido
Texto
En los 60’s apareció el código ASCII (American Standard Code for Information Exchange)
128 caracteres: 33 de control y 94 normales
Carácter #65
Hoy en día: UTF‐8, Unicode
Números
La representación de enteros positivos es relativamente directa
10010101 = 2^0 + 2^2 + 2^5 + 2^8 = 1 + 4 + 16 + 128 = 149
Cuál sería un algoritmo para convertir de decimal a binario?
De decimal a binario
Algoritmo
1.‐ Dividir la cantidad entre dos y registrar el residuo
2.‐ Mientras que el cociente no sea cero, continuar dividiendo el nuevo cociente por dos y registrar los residuos
3.‐ Una vez que se obtiene un cociente de cero, la representación binaria consiste en los residuos listados de derecha a izquierda en el orden en que fueron registrados
Ejemplo
Pasar a binario el número 13
13 / 2 = 6 resta 1
6 / 2 = 3 resta 0
3 / 2 = 1 resta 1
1 / 2 = 0 resta 1
La representación binaria de 13 es 1101
Suma binaria
La suma binaria es muy similar a la suma en el sistema decimal
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = ?
111010 + 11011 = ?
Suma binaria
La suma binaria es muy similar a la suma en el sistema decimal
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10
111010 + 11011 = 1010101
Almacenamiento de enteros
Los enteros Z están formados por los números naturales incluyendo 0 (0,1,2,3…) y los negativos de los números naturales excluyendo el cero (‐1,‐2,‐3…)
El sistema más popular para la representación de enteros es el sistema de complemento a dos
Complemento a dos
El complemento a dos permite expresar enteros negativos
Para calcularlo
Recorrer de derecha a izquierda
hasta toparse con un 1. Copiar
los números recorridos incluyendo
el 1. A partir de ahí, negar los dígitos
restantes.
Otra opción es negar todos los dígitos
y sumar 1 al resultado
El bit a la izquierda es el bit de signo
Suma en notación de complemento a dos
Para la suma en notación de base dos, se usa el mismo procedimiento que para la suma binaria estándar quitando cualquier bit
adicional que se produzca de la suma
Ej. 7 + (‐5) = 0111 + 1011 = ?
De aquí ya podemos ver la manera de realizar restas
Sobreflujo
El sobreflujo puede ocurrir cuando se tiene una suma de dos números de n bits y el resultado de la suma ocupa n+1 bits
Ejemplo: Suma de 5 + 4 : 0101 + 0100 = ?
Sobreflujo
El sobreflujo puede ocurrir cuando se usa notación de complemento a dos y se tiene una suma de dos números de n bits y el resultado de la excede el rango que se puede representar con los n bits.
Ejemplo: Suma de 5 + 4 : 0101 + 0100 = 1001 = ‐7
Dependiendo del tipo de dato que se usa, puede se un problema que no ocurre tan frecuentemente
Ej. 32 bits permite enteros positivos de hasta 2,147,483,647
Sin embargo es por esta razón que debemos cuidar el tipo de dato que se elige para almacenar una variable
Tipos de datos en Java
byte: 8 bits con signo (‐128, 127)
short: 16 bits con signo (‐32’768, 32’767)
int: 32 bits con signo (‐2’147’483’648, 2’147’483’647)
long: 64 bits con signo (‐9’223’372’036’854’775’808, 9’223’372’036’854’775’807)
float: Punto flotante de 32 bits
double: Punto flotante de 64 bits
char: Unicode de 16 bit
Decimales en binario
Para transformar de entero con decimales a binario
1.‐ Se transforma la parte entera a binario
2.‐ Se multiplica cada número de la parte fraccionaria por dos. Si el resultado es mayor o igual a 1 se anota como un 1 binario, de lo contrario es un cero binario
Decimales en binario
Ejemplo: 6.83
6 → 110
0.83 x 2 → 1.66 = 1
0.66 x 2 → 1.32 = 1
0.32 x 2 → 0.64 = 0
0.64 x 2 → 1.28 = 1
0,28 x 2 → 0,56 = 0
0,56 x 2 → 1,12 = 1
0,12 x 2 → 0,24 = 0
0,24 x 2 → 0,48 = 0
0,48 x 2 → 0,96 = 0
0,96 x 2 → 1,92 = 1
0,92 x 2 → 1,84 = 1
0,84 x 2 → 1,68 = 1
El resultado sería entonces: 110.110101000111
Nota: Algunos números se transforman en dígitos periódicos por ej. 0.1
Almacenamiento de decimales
A diferencia del almacenamiento de enteros, el almacenamiento de un valor con una parte decimale
requiere además del patrón de 1s y 0s un valor con la posición del punto. Es por esto que se habla de “punto flotante”
Ejemplo con un byte: 01101011, suponiendo
Un bit de signo
tres bits para el exponente
cuatro bits para la mantisa
Almacenamiento de fracciones
Ejemplo con un byte: 01101011, suponiendo
Un bit de signo: 0
tres bits para el exponente: 110
cuatro bits para la mantisa: 1011
La interpretación del exponente se hace usando un método llamado “en exceso” Notación en exceso
Este es otro método para almacenar enteros con signo. En este método, el patrón con un uno a la izquierda y los demás digitos en cero es considerado el cero entero.
1111 → 7 1110 → 6
1101 → 5
1100 → 4
1011 → 3
1010 → 2
1001 → 1
1000 → 0
0111 → ‐1
0110 → ‐2
0101 → ‐3
0100 → ‐4
0011 → ‐5
0010 → ‐6
0001 → ‐7
0000 → ‐8
111 → 3
110 → 2
101 → 1
100 → 0
011 → ‐1
010 → ‐2
001 → ‐3
000 → ‐4
Almacenamiento de fracciones
Ejemplo con un byte: 01101011, suponiendo
Un bit de signo: 0 (más)
tres bits para el exponente: 110
cuatro bits para la mantisa: 1011
La interpretación de la parte decimal se usa un método llamado “en exceso” 110 = 2 esto nos dice de mover el punto a la derecha en 2 bits (si el valor fuera negativo, lo moveríamos a la izquierda)
Obtenemos entonces 10.11 → 1x2^1 + 0x2^0 . 1 / 2^1 + 1 / 2^2 = 2.75
Descargar