1 NIVEL 14: ESTRUCTURAS DE ACCESO DIRECTO BitArray y BitString ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 2 Agenda • Contexto • La Clase BitArray • La Clase BitString ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 3 CUPI2 Collections • Framework con la implementación de múltiples estructuras de datos y su respectiva algorítmica. • Su objetivo es ilustrar la manera adecuada de diseñar las estructuras de datos para representar información, con restricciones sobre su acceso y manejo ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 4 Estructuras de acceso directo • Por llave: • tablas de asociación – diccionarios – tablas de hashing. • Por posición: • Longitud variable: • • • No compactas: ArrayList, Vector Compactas: BitString Longitud fija • • No compactas: arreglos Compactas: BitArray ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 5 El problema ¿Por qué puede ser necesario manejar información a nivel de bits? ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 6 El tipo byte en Java • Ocupa 8 bits en memoria • Puede contener valores entre -128 y 127 • Declaración: • byte b1 = 127; ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 7 Representación en complemento 2 • El complemento A2 permite representar números binarios negativos. • El dígito más significativo es el bit del signo, si es 0 entonces el número es positivo y si es 1 es negativo. Recuperado de: http://www.ladelec.com/teoria/electronica-digital/149-sistemas-de-numeracion-en-complemento-a-2.html ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 8 Representación en complemento 2 • Los otros bits representan la magnitud del número. • Para obtener el complemento A2 se cambia cada 0 del número por 1 y viceversa (complemento A1). A este resultado se le suma 1. Recuperado de: http://www.ladelec.com/teoria/electronica-digital/149-sistemas-de-numeracion-en-complemento-a-2.html ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 9 Representación en complemento 2 • Ejemplo: Obtener el complemento A2 de 9 9=1001 0110 Complemento A1 + 1 Se suma 1 0111 Al Agregar el bit del signo se tiene el complemento A2 -9=10111 ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 10 Representación en complemento 2 usando 4 bits ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 11 Signo ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 0 1 0 0 = 4 0 0 1 1 = 3 0 0 1 0 = 2 0 0 0 1 = 1 0 0 0 0 = 0 1 1 1 1 = -1 1 1 1 0 = -2 1 1 0 1 = -3 1 1 0 0 = -4 12 Operadores de manejo de bits • op1 << op2: desplaza a la izquierda op2 bits de op1 a = 1 << 1; • b = 1 << 2; • c = 1 << 3; • d = 1 << 7; • ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co // a = 2 // b = 4 // c = 8 // d = -128 13 Operadores de manejo de bits • op1 >> op2: desplaza a la derecha op1 (con signo): • a = 64 >> 1; • b = 64 >> 2; • c = 64 >> 4; • d = -1 >> 1; • e = -2 >> 1; • f = -128 >> 7; ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co // a = 32 // b = 16 // c = 8 // d = -1 // e = -1 // f = -1 op2 bits de 14 Operadores de manejo de bits • op1 & op2: operador AND bit a bit • op1 | op2: operador OR bit a bit a = 1 & 1; • b = 1 & 0; • c = 1 | 0; • ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co // a = 1 // b = 0 // c = 1 15 ¿Cómo obtener un bit específico? byte a = 91; 0 1 2 3 4 5 6 7 0 1 0 0 0 1. Crear la máscara: 0 0 ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 0 16 ¿Cómo obtener un bit específico? 2. Aplicar el operador &: 0 1 2 3 4 5 6 7 0 0 0 0 1 0 0 0 3. Si el resultado es 0, el bit es 0. Si el resultado es diferente de 0, el bit es 1 ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 17 Crear la máscara byte a = 91; 0 1 2 3 4 5 6 7 0 0 0 0 0 0 0 1 mascara =<< (7 – 4); ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 18 Verificar el valor byte a = 91; mascara =<< ( 7 – pos ); return a & mascara != 0; ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 19 Agenda • Contexto • La Clase BitArray • La Clase BitString ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 20 Clase BitArray • Esta clase representa un arreglo de longitud fija de bits. import uniandes.cupi2.collections.bitArray BitArray ba = new BitArray( 876 ); • Los bits se numeran 0 a 875). ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co desde 0 (en el ejemplo, de 21 Clase BitArray ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 22 Clase BitArray ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 23 Clase BitArray ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 24 Clase BitArray ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 25 Agenda • Contexto • La Clase BitArray • La Clase BitString ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 26 La clase BitString • Es una estructura lineal de longitud variable, cuyos elementos son únicamente ceros y unos. • Sirve para representar un conjunto o para manipular datos binarios. ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 27 BitString • Cada elemento en un bitstring se referencia por su posición. Las posiciones se numeran de manera consecutiva comenzando en 0 hasta la longitud del bitstring menos 1. 0 ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co n-1 28 La clase BitString ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 29 La clase BitString ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co 30 La clase BitString ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co