Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: loryisus en 6 Marzo 2014, 18:52 pm



Título: Máscaras y bloques de bits
Publicado por: loryisus en 6 Marzo 2014, 18:52 pm
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)
Código:
#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:
Código:
void set_union(item_t i);

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

Gracias por adelantado.




Título: Re: Máscaras y bloques de bits
Publicado por: ivancea96 en 6 Marzo 2014, 18:55 pm
Te olvidaste de decir cuál es el problema.


Título: Re: Máscaras y bloques de bits
Publicado por: loryisus en 6 Marzo 2014, 22:08 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.


Título: Re: Máscaras y bloques de bits
Publicado por: 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
  1. /** 0b significa valor en binario **/
  2. int var = 2; //0b10
  3. var << 1; //0b100   Se ha desplazado 1 posición (izquierda)
  4. var << 3; //0b100000   Se ha desplazado 3 posiciones (izquierda)
  5. 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.


Título: Re: Máscaras y bloques de bits
Publicado por: eferion en 7 Marzo 2014, 08:06 am
En verdad no se muy bien qué tienes que hacer. Pero si te ayuda, te dejo algo:

Código
  1. /** 0b significa valor en binario **/
  2. int var = 2; //0b10
  3. var << 1; //0b100   Se ha desplazado 1 posición (izquierda)
  4. var << 3; //0b100000   Se ha desplazado 3 posiciones (izquierda)
  5. 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
  1. /** 0b significa valor en binario **/
  2. int var = 2; //0b10
  3. int var2 = var << 1; //0b100 Se ha desplazado 1 posición (izquierda)
  4. var2 = var << 3; //0b100000 Se ha desplazado 3 posiciones (izquierda)
  5. 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.


Título: Re: Máscaras y bloques de bits
Publicado por: ivancea96 en 7 Marzo 2014, 15:21 pm
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
  1. /* ... */var << 1 == 0b100;



Título: Re: Máscaras y bloques de bits
Publicado por: eferion en 7 Marzo 2014, 20:16 pm
No dije que se guardase. Lo pondré de otra forma:

Código
  1. /* ... */var << 1 == 0b100;



ok. Solo lo puse por si acaso ;)