Bitvariable in C testen

Gast #34969
Lesenswert?
• ▲
▼
Hallo C-Freund,

eigentlich müsste ich mich für diese Frage schämen. Aber hier habe ich 
einen Blackout.

Es soll die Bitvariable 'GOK' auf '0' getestet werden.

1.               if (!(GOK == 1))
                    {
                     bei GOK == 0 geht's hier weiter
                    }

oder 2.           if (GOK != 1)
                     {
                      bei GOK == 0 geht's hier weiter
                     }

oder 3.            if (GOK == 0)
                      {
                       bei GOK == 0 geht's hier weiter
                      }

Vielleicht kann man mir die Lösung schonend beibringen, vielen Dank!

Norbert
#34970
Lesenswert?
• ▲
▼
Die ANSI Methode Bits zu testen oder zu setzen ist mittels Maskierung. 
Wenn der MC Bitadressierung unterstützt, optimiert er das auch meistens 
zu dem entsprechenden Bitbefehl:

#define BIT_NR 7 //Nummer des Bits im Register (0..7)
#define BIT_REGISTER 0xAA //Adresse des Registers

BIT_REGISTER != 1<<BIT_NR; // setzen

BIT_REGISTER &= ~(1<<BIT_NR); // löschen

if( BIT_REGISTER & (1<<BIT_NR) ){ // testen
; // tue was
}


Peter
Gast #34971
Lesenswert?
• ▲
▼
Wenn GOK bereits als Bitvariable definiert ist, dann ist Dein Vorschlag 
Nr. 3 ausreichend (alle anderen stimmen übrigens auch!), oder noch 
kürzer:
if (!GOK)
        {
             //bei GOK == 0 geht's hier weiter
        }
Gast #34973
Lesenswert?
• ▲
▼
und andersrum gehts natürlich genauso
if (GOK)
   {
   }
Und wenn wir einmal beim Thema sind: hat jemand eine Idee, wie man 
Bitfelder anlegen kann? Konkret gehts um ein Projekt, bei dem 4 
gleichartige Kanäle bedient werden sollen, und da die Verarbeitung für 
alle 4 Kanäle gleich ist, sind die entsprechenden Variablen natürlich 
als Arrays abgelegt. Zu jedem Kanal gehören auch 3 Statusbits. Im Moment 
habe ich char-Variablen für die Statusinformationen genommen, 
funktioniert auch. Aber jetzt kommen noch Erweiterungen hinzu, und der 
RAM ist ausgelutscht. Wenn ich die Statusinformationen als bit speichern 
könnte, hätte ich 10 byte gewonnen, das würde genügen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren