Bitvariable in C testen

Gast #34969
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
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
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
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.
Gast #34974
Das mit den Bitfeldern ist schnell erledigt...

typedef struct
{
  unsigned char Kanal_1:1;
  unsigned char Kanal_2:1;
  unsigned char Kanal_3:1;
  unsigned char Kanal_4:1;
} Status;

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.