Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Uint32 flags - SDL

Estas en el tema de Uint32 flags - SDL en el foro de C/C++ en Foros del Web. Hola a todos, Creo que traigo una duda bastante de novato: ¿qué es exactamente y para qué se usa el Uint32 flags? He empezado a ...
  #1 (permalink)  
Antiguo 26/01/2015, 12:32
 
Fecha de Ingreso: enero-2015
Mensajes: 2
Antigüedad: 9 años, 2 meses
Puntos: 0
Uint32 flags - SDL

Hola a todos,

Creo que traigo una duda bastante de novato: ¿qué es exactamente y para qué se usa el Uint32 flags? He empezado a desarrollar un plataformas sencillísimo en C++ con SDL2 y veo que es una parámetro que aparece en muchas funciones de la librería pero no entiendo los valores que se le da ni qué representa exactamente... ¿Alguien puede esclarecerme un poco el tema?

Muchas gracias por adelantado.
  #2 (permalink)  
Antiguo 26/01/2015, 13:05
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Uint32 flags - SDL

Deduzco que lo dices por la documentación.

Uint32 es el tipo de la variable (entero sin signo de 32 bits). En los SO modernos debería ser igual a un unsigned int de toda la vida.

Flags es solo un nombre que le ponen los desarrolladores, a ti no te debería influir.
  #3 (permalink)  
Antiguo 26/01/2015, 14:38
 
Fecha de Ingreso: enero-2015
Mensajes: 2
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Uint32 flags - SDL

Vale, es que no había trabajado hasta ahora con este tipo de variables. Muchas gracias, solucionado.
  #4 (permalink)  
Antiguo 27/01/2015, 01:47
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Uint32 flags - SDL

Se que el tema ya está solucionado. Sin embargo, por si vuelves a pasar por aquí, te cuento un poco para que te quites el miedo a los flags.

Un flag no es más que un estado binario (1 o 0) que se almacena en una variable. Dado que una variable numérica dispone de varios bits, es posible almacenar varios flags diferentes en una misma variable. Por ejemplo, en un "unsigned int", que típicamente ocupa 4 bytes, sera posible almacenar 32 flags diferentes, uno en cada bit de la variable.

Para "setear" estos flags hay que hacer uso de lógica binaria. Un ejemplo:

Código C++:
Ver original
  1. unsigned int flags = 0;
  2.  
  3. // Activo el 3er bit
  4. flags |= 0x04 // En binario: 0000 0000 0000 0100
  5.  
  6. // Activo el 1er bit
  7. flags |= 0x01
  8.  
  9. // Desactivo el 3er bit
  10. flags ^= 0x04
  11.  
  12. printf( "%d", flags ); // Imprime 1

Usar una variable a modo de flag puede ser útil cuando quieres, o necesitas, empaquetar información de estado o configuración. Esto se suele hacer configurando un enum para evitar meter la pata con los valores:

Código C++:
Ver original
  1. enum RunConfig
  2. {
  3.   NoConfig = 0,
  4.   LoadConfig = 1<<0, // 0x01
  5.   SaveConfig = 1<<1, // 0x02
  6.   LoadData = 1<<2, // 0x04
  7.   RunServices = 1<<3, // 0x08
  8.   LogEnabled = 1<<4, // 0x10
  9.   // ...
  10. };
  11.  
  12. int flag = LoadConfig | LogEnabled; // 0x01 + 0x10 = 0x11 <-> 0001 0001
  13.  
  14. // ...
  15.  
  16. if ( flag & LogEnabled ) // 0001 0001 & 0001 0000 = 0001 0000 != 0
  17. {
  18.   // Este código se ejecutará al estar activo el 5º flag
  19. }
  20.  
  21. if ( flag & RunServices ) // 0001 0001 & 0000 1000 = 0000 0000 == 0
  22. {
  23.  // Este código no se ejecutará, el 4º flag no está activo
  24. }

Espero haberte aclarado con esto un poco el tema de los flags

Etiquetas: flags, funcion, sdl
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:15.