Flags anlegen



  • Hallo!
    Würde mir gerne eine Header Datei schreiben in der ich Flags setzen kann.
    Momentan löse ich das so:
    unsigned char g_Flag1;
    unsigned char g_Flag2;
    unsigned char g_Flag3;

    g_Flag1 = 1;
    oder:
    g_Flag2 = 0
    usw.

    Da ich so ne Mänge Speicher belege, wollte ich mal nachfragen, wie man das normal so macht! Man kann doch auch einen char Wert nehmen, und diesen Bitweise setzten, oder?
    Kann mir jemand anhand meines Beispieles zeigen wie das geht?
    Danke



  • Du kannst z.B. ein Bitfield verwenden.
    Das sind Strukturen, deren Member weniger Bits als interne Datentypen haben.
    Die Anzahl der Bits gibst du mit :Anzahl aus.

    struct bitfeld
    {
        unsigned char blinken : 1; //Ein oder aus
        unsigned char farbe : 2; //4 Möglichkeiten
        unsigned char hex : 4; // 4 Bits = 16 Zustände
    } test;
    


  • Irre ich mich, oder wäre es nicht sinnvoll, für einfache Flags bool-Werte zu benutzen?



  • Hallo Bob,
    ich glaube wir meinen das Gleiche.
    Diese kann ich doch dann irgendwie Bitweise ansprechen, oder?
    So irgendwie:
    char Flag;

    Flag_1 = 000000001;
    Flag_2 = 000000010;

    dann

    Flag_1 =1 oder Flag_1=0

    Aber das klappt bei mir nicht!
    Schreib mir doch bitte mal ein kurzes Programm!
    Wäre Dir sehr dankbar!!!!



  • Vieleichet so:

    bool Flag[8]={0};

    Flag[0]=1;
    Flag[1]=1;

    u.s.w.



  • unsigned int flags;
    
    #define FLAG1			0x0001
    #define FLAG2			0x0002
    #define FLAG3			0x0004
    #define FLAG4			0x0008
    #define FLAG5			0x0010
    
    Um zu setzen:
    
    flags |= FLAG1;
    
    Um zu löschen:
    
    flags &= ~FLAG1;
    
    Um zu checken, ob gesetzt:
    
    if(flags & FLAG1) ...
    


  • du kannst FLAG dann auch so berechnen:

    FLAGi = 1<<i;

    da kannste dann ne funktion draus bauen..



  • Hallo!
    Das was der kleine Feigling geschrieben hat, würde mir schon auslangen.
    Doch irgendetwas klappt da nicht!
    Programm war zwar ausführbar, aber die Flags sind immer gesetzt.
    Muß ich #define vielleicht in Klammern setzten oder so???
    Danke für Eure Tips!!!



  • #include <stdio.h>
    
    #define FLAG1            0x0001 
    #define FLAG2            0x0002 
    #define FLAG3            0x0004 
    #define FLAG4            0x0008 
    #define FLAG5            0x0010
    
    int main(void)
    {
    	unsigned int flags = 0;
    
    	flags |= FLAG1;
    
    	if(flags & FLAG1)
    		printf("1 gesetzt\n");
    
    	flags &= ~FLAG1;
    
    	if(flags & FLAG1)
    		printf("1 gesetzt\n");
    	else
    		printf("1 nicht gesetzt\n");
    
    	flags |= FLAG1;
    
    	if(flags & FLAG1)
    		printf("1 gesetzt\n");
    
        return 0; 
    }
    


  • typedef enum {
      flag1 = 1 << 0, /* 1 */
      flag2 = 1 << 1, /* 2 */
      flag3 = 1 << 2, /* 4 */
      flag4 = 1 << 3; /* 8 */
      /* ... */
    } flags;
    
    /* ... */
    
    flags my_flags = flag1 | flag3 | flag4;
    
    /* ... */
    
    if(my_flags & flag3) {
      puts("flag3 gesetzt.");
    }
    

    ...so würde ich das machen.


Anmelden zum Antworten