ISIS1206- Estructuras de Datos Nivel 14: Bit String, Java Collection

Anuncio
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
Descargar