Máscaras y bloques de bits

Iniciado por loryisus, 6 Marzo 2014, 18:52 PM

0 Miembros y 2 Visitantes están viendo este tema.

loryisus

Buenas, tengo un problema con la asignatura de Algoritmos y Estructura de Datos, les paso uno de los ejercicios que me piden:
- El primero inserta un único elemento dentro del conjunto. Para ello
Se debe crear un bloque auxiliar conteniendo la máscara ONE_MASK y
hacer un desplazamiento de bits a la izquierda tantas veces como
indique el elemento a insertar. Después se efectuará el or lógico con
el conjunto llamante.


El bloque viene declarado así debajo de "using namespace std", el resto de elementos al igual que la función a desarrollar se encuentra en una clase:
(la máscara representa el bit menos significativo a 1)

#include <iostream>
using namespace std;
typedef unsigned long block_t; /*aquí*/
typedef unsigned char item_t;
typedef unsigned char block_size_t;
#define EMPTY_SET_MASK 0x00
#define ONE_MASK 0x01 /*Mascara que mencionan en el enunciado*/
class bit_set {
/*ATRIBUTOS PRIVADOS*/
block_t block_; /*Bloque de bits*/
block_size_t block_size_;


En la función que piden realizar se pasan los siguientes datos:

void set_union(item_t i);


Si necesitan más datos o no me he explicado bien diganmelo.

Gracias por adelantado.



ivancea96

Te olvidaste de decir cuál es el problema.

loryisus

Cita de: ivancea96 en  6 Marzo 2014, 18:55 PM
Te olvidaste de decir cuál es el problema.
Es el que puse arriba en negrita, pero principalmente el problema es que no se a que se refiere exactamente con bloque auxiliar (¿Quizas declarar otro como: block_t nuevo = block_ dentro de la funcion), y tampoco se como introducir una mascara dentro de un bloque de bits.

ivancea96

En verdad no se muy bien qué tienes que hacer. Pero si te ayuda, te dejo algo:

Código (cpp) [Seleccionar]
/** 0b significa valor en binario **/
int var = 2; //0b10
var << 1; //0b100   Se ha desplazado 1 posición (izquierda)
var << 3; //0b100000   Se ha desplazado 3 posiciones (izquierda)
var >> 5; //0b1   Se ha desplazado 5 posiciones (derecha)


Esos son los desplazamientos.

Como dije, ni idea de lo que estáis dando, ¿en clase?

Suerte.

eferion

Cita de: ivancea96 en  6 Marzo 2014, 22:19 PM
En verdad no se muy bien qué tienes que hacer. Pero si te ayuda, te dejo algo:

Código (cpp) [Seleccionar]
/** 0b significa valor en binario **/
int var = 2; //0b10
var << 1; //0b100   Se ha desplazado 1 posición (izquierda)
var << 3; //0b100000   Se ha desplazado 3 posiciones (izquierda)
var >> 5; //0b1   Se ha desplazado 5 posiciones (derecha)


Esos son los desplazamientos.

Como dije, ni idea de lo que estáis dando, ¿en clase?

Suerte.

Más bien sería...

Código (cpp) [Seleccionar]
/** 0b significa valor en binario **/
int var = 2; //0b10
int var2 = var << 1; //0b100 Se ha desplazado 1 posición (izquierda)
var2 = var << 3; //0b100000 Se ha desplazado 3 posiciones (izquierda)
var2 = var >> 5; //0b1 Se ha desplazado 5 posiciones (derecha)


Al hacer un desplazamiento el valor no se guarda por defecto en la variable desplazada.

ivancea96

Cita de: eferion en  7 Marzo 2014, 08:06 AM
Al hacer un desplazamiento el valor no se guarda por defecto en la variable desplazada.

No dije que se guardase. Lo pondré de otra forma:

Código (cpp) [Seleccionar]
/* ... */var << 1 == 0b100;


eferion

Cita de: ivancea96 en  7 Marzo 2014, 15:21 PM
No dije que se guardase. Lo pondré de otra forma:

Código (cpp) [Seleccionar]
/* ... */var << 1 == 0b100;



ok. Solo lo puse por si acaso ;)