• Viernes 8 de Noviembre de 2024, 20:00

Autor Tema:  Duda De Principiante  (Leído 1945 veces)

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Duda De Principiante
« en: Jueves 4 de Enero de 2007, 20:12 »
0
Buenas.

Tengo una pequeña duda de los mapas de bits.

Si yo hago por ejemplo un mapa de bits con 8 variables bool de 1 bit cada una

Código: Text
  1.  
  2. struct MapaBits {
  3.    bool valor1:1;
  4.    bool valor2:1;
  5.    bool valor3:1;
  6.    bool valor4:1;
  7.    bool valor5:1;
  8.    bool valor6:1;
  9.    bool valor7:1;
  10.    bool valor8:1;
  11. }
  12.  
  13.  
Existe alguna forma de asignarle el valor a los 8 bits a partir de una variable de 1 byte, como un char.

Por ejemplo:
char a = '/126'
que en binario seria "01111110"

y que los boolean tomen los balores de los bits del char...
valor1 = false
valor2 = true
...
valor8 = false

Bueno, esa es mi duda.
Gracias de antemano
Saludos
The sweet smell of a great sorrow lies over the land.


bob esponja

  • Miembro MUY activo
  • ***
  • Mensajes: 411
    • Ver Perfil
    • http://marianoguerra.blogspot.com
Re: Duda De Principiante
« Respuesta #1 en: Jueves 4 de Enero de 2007, 20:32 »
0
a&1
a&2
a&4
a&8
a&16
a&32
a&64
a&128

con eso deberia andar

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Duda De Principiante
« Respuesta #2 en: Viernes 5 de Enero de 2007, 00:29 »
0
Muchas gracias, justo lo q necesitaba ^^


Saludos
The sweet smell of a great sorrow lies over the land.


JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Duda De Principiante
« Respuesta #3 en: Sábado 6 de Enero de 2007, 19:22 »
0
asi como veo que lo quieres usar seria mejor usar un enum .
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Duda De Principiante
« Respuesta #4 en: Martes 9 de Enero de 2007, 00:26 »
0
Buenas

Citar
asi como veo que lo quieres usar seria mejor usar un enum .

un enum?  :blink:

pero el enum almacena constantes, o me equivoco?

tengo una base de datos (binaria) de 20.000 registros aprox, cada registro tiene 32 campos booleanos entre otros. Asique me parecio algo logico perder un poco de velocidad a cambio de ahorrarme 28 bytes por registro

Quisas estoy equivocado, si te parece asi te agradeceria q me lo digas, soy bastante nuevo en c/c++, y cosas como esta, entre tantas otras, en vb no existen  :ph34r:

Saludos
The sweet smell of a great sorrow lies over the land.


JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Duda De Principiante
« Respuesta #5 en: Martes 9 de Enero de 2007, 00:45 »
0
constantes?.
Es parte de su funcionalidad, pero solo parte.

Cada dato tipo bool ocupa, sino estoy mal,  32 bits asi que has la cuenta e ncuanto estas gastando haciendolo con el struct que mencionas.

Mi sugerencia es que uses una enum porque sera lo suficientemente claro asi como lo suficientemente eficiente para que te ahorres un poco de vainas.

Ahora por otro lado puedeshacer algo aun mas eficiente aunque con mayor esfuerzo de tuparte, puedes usar un dato tipo int de 32 bits ya con ese puedes almacenar en cada bit los 32 registros booleanos, para tal fin utiliza operaciones binarias como
|
&

Puedes hacer un componente que te facilite ese tipo de operaciones.

ejemplo de enum:
Código: Text
  1.  
  2. public enum ValoresBooleanos
  3. {
  4.     valUno = 0x1,
  5.     valDos = 0x2,
  6.     valTres= 0x4,
  7.    ...
  8.    ...
  9.  
  10. };
  11.  
  12. ...
  13. ...
  14. ...
  15.  
  16. ValoresBooleanos miEnum;
  17.  
  18. //Activar el campo 1 en true:
  19. miEnum = ValoresBooleanos.valuno;
  20.  
  21. //ahora activar el campo 2
  22. miEnum |= ValoresBooleanos.valDos;
  23. ...
  24. ...
  25. ...
  26. //Desactivar el valor de campo1
  27. miEnum &= ~ValoresBooleanos.valuno;
  28.  


Muy parecido, aunque más óptimo seria utilizar una variable entera.

Salu2
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Anastasio

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Duda De Principiante
« Respuesta #6 en: Martes 9 de Enero de 2007, 17:08 »
0
Muy buenas:
  Otra posibilidad es utilizar una unión entre un char y el struct que tienes definido para el mapa de bits. Como las uniones utilizan el mismo espacio de memoria, puedes utilizar la variable char de la unión para cargar el dato y después acceder a él a través de los campos del struct.

Un Saludo.