UNIONS, MANIPULADORES DE BITS Y ENUMERACIONES
4.1 uniones
Las
uniones desarmables son aquellas que reúnen varias piezas de manera solidaria y
forman con ellas una misma pieza; pero que permiten, en todomomento, la separación de las piezas
unidas, mediante una maniobra fácil que no deteriora los
elementos.
Este sistema es el más frecuentemente empleado, y uno de los medios de unión desarmable más utilizada es el empleo de tornillos y tuercas.
En una bicicleta, por ejemplo, se unen con tornillos las piezas del mecanismo de rueda libre, eles y horquilla, manivelas y pedales y llantas. En el montaje de una motocicleta o automóvil intervienen, ordinariamente, cientos de tornillos, tuercas y arandelas, pernos roscados, etc. Todas estas piezas, cuando ello es necesario, (en las reparaciones) se pueden desmontar y volverlas a montar.
elementos.
Este sistema es el más frecuentemente empleado, y uno de los medios de unión desarmable más utilizada es el empleo de tornillos y tuercas.
En una bicicleta, por ejemplo, se unen con tornillos las piezas del mecanismo de rueda libre, eles y horquilla, manivelas y pedales y llantas. En el montaje de una motocicleta o automóvil intervienen, ordinariamente, cientos de tornillos, tuercas y arandelas, pernos roscados, etc. Todas estas piezas, cuando ello es necesario, (en las reparaciones) se pueden desmontar y volverlas a montar.
Las uniones C++ son un tipo especial de clase; un tipo de variable con cierta
similitud con las estructuras Pueden albergar diferentes tipos de datos, pero
solo uno, de entre todos los posibles, al mismo tiempo. Se dice que solo uno
puede estar "activo"
en cada momento, y se corresponden con los registros de tipo variable de Pascal
y Modula-2. Como el lector estará suponiendo, el tamaño de una unión es el del mayor
elemento que puede albergar. El valor exacto depende de la implementación y de las
alineaciones internas
Como se verá a continuación, desde el punto de vista de su
organización interna son como estructuras en las que todos sus miembros
tuviesen el mismo desplazamiento respecto al origen. Desde un punto de vista
funcional pueden ser considerados
almacenamientos u objetos multi-uso.
En realidad las uniones son un recurso de programación que permite alojar distintos tipos
de objetos en un mismo espacio cuando estos objetos no coexisten en el tiempo y
no hay suficiente memoria disponible para asignarles espacios distintos. Se
trata por tanto de objetos muy especializados en cuanto a su uso, propio de
aplicaciones muy "afinadas", de tiempos en que la memoria era un bien
escaso, pero cuya utilización real es bastante rara y desaconsejada
4.2 OPERADORES A NIVEL DE BITS
Una operación bit a bit o bitwise opera sobre números binarios a nivel de sus bits individuales. Es una acción primitiva rápida,
soportada directamente por los procesadores. En procesadores
simples de bajo costo, las operaciones de bit a bit, junto con los de adición y
sustracción, son típicamente sustancialmente más rápidas que la multiplicación y la división, mientras que en
los modernos procesadores de alto rendimiento usualmente las operaciones se
realizan a la misma velocidad.
Ø
Tipos
1. Operaciones bit a bit: Ejecutan las operaciones lógicas AND, OR, XOR,
NOT, etc, sobre los bits individuales de los operandos.
2. Operaciones de Desplazamiento: Desplazan los bits de los operandos hacia
la derecha o hacia la izquierda una o más posiciones.
3. Operaciones de Rotación: Rotan los bits del operando hacia la derecha o
hacia la izquierda una o más posiciones. Pueden usar o no el flag del acarreo como un bit adicional en la rotación.
En primer lugar
veamos la necesidad de trabajar a nivel bit, y creo que la mejor forma es dando
un ejemplo practico. Supongamos que obtuvimos un código de Huffman sobre unos
caracteres y nos dio la siguiente codificación:
Entonces, por
ejemplo la siguiente cadena “aacbc”, la codifico y produce la
Secuencia 1100101001.Ahora
bien, si uno representara cada bit como un char o un integre estaríamos
expandiendo siempre el archivo original y esto no es lo que queremos. Entonces
introduciremos y refrescaremos conceptos de lógica binaria y exactamente para
que sirve cada operador, para luego ver implementaciones de algoritmos en Java.