Forum: Mikrocontroller und Digitale Elektronik Wie kann man in C einzelne Bits einer Variable prüfen ?


von Andreas Kramer (Gast)


Lesenswert?

Gibt es eine Möglichkeit wie man bei einer Variable in C überprüft ob 
das z.B. 3 bit 1 oder 0 ist ohne dabei die anderen Bits zu beachten. 
Hintergrund ist ich möchte eine Art Status bit für mein Programm basteln 
und es wäre super wenn ich da wie bei einem µC eine einzelne Variable 
für verschiedene Dinge nehmen könnte.

Gruß Andreas

von Zip (Gast)


Lesenswert?

if ((mybyte && 0x04)==0x04)) {  ..          }

Z.

von Sonic (Gast)


Lesenswert?

if (mybyte &(1<<0x04))
{
   Aktion..
}

Ist doch einfacher.

von Sonic (Gast)


Lesenswert?

Ups, nicht richtig gelesen!
'Maskieren' nennt man das Ganze und geht so wie Zip geschrieben hat.

von Sonic (Gast)


Lesenswert?

FALSCH!
if ((mybyte & 0x04)==0x04)) {  ..          }
Da war 'n '&' zuviel drin!
Oder seh' ich den Wald vor lauter Bäumen nicht mehr?

von sven s. (Gast)


Lesenswert?

if (mybyte & (1<<mybit))
{
}

@sonic
ist doch nicht so schwer oder ...

von Andreas Kramer (Gast)


Lesenswert?

Danke genau das habe ich gesucht weil sonnst wäre das echt 
Speicherverschwendung für jedes an aus eine eigene Variable.

Gruß Andreas

von guro (Gast)


Lesenswert?

> if ((mybyte & 0x04)==0x04)) {  ..          }
das == kannst du dir auch sparen.

wenn man das ergebnis als 0 oder 1 haben will, kann man's auch so 
machen.

#define GET_BIT(a,b) (!!(a&(1<<b)))
...
int i = 0x81;
int b7 = GET_BIT(i,7);   // ergibt 1 weil bit 7 gesetzt ist
int b6 = IS_BIT(i,6);    // ergibt 0 weil bit 6 nicht gesetzt ist

von Sonic (Gast)


Lesenswert?

Jo, damit prüfste 1 bit, deshalb hab' ich mich ja korrigiert.

Bit 0 => 1
Bit 3 => 8

==> 0x09


if (!((mybyte & 0x09)==0x09)))
{
  Aktion..
}
So wird 'n Schuh draus.

von Sonic (Gast)


Lesenswert?

Ich werde jetzt Feierabend machen ;-)

if ((!(mybyte &(1<<0x00))) || (!(mybyte &(1<<0x03))))
{
  Aktion..
}

Oder?

von Josef (Gast)


Lesenswert?

if (!((mybyte & 0x09) >= 0)))

von Sonic (Gast)


Lesenswert?

@Josef:
Du betrachtest beide Bits gemeinsam, er möchte aber wissen ob bit 3 ODER 
bit 1 null ist. Das geht nur durch eine bitweise ODER-Abfrage.

von Karl H. (kbuchegg)


Lesenswert?

> ob bit 3 ODER bit 1 null

Ergo
 if( ( mbyte & 0x09 ) != 0x09 )

Wenn die Fragestellung lautet, ob bit 3 oder bit 1 eine
1 ist (oder beide)
 if( ( mbyte & 0x09 ) != 0 )

von Sonic (Gast)


Lesenswert?

Jo, so geht's auch ;-)

von Andreas Kramer (Gast)


Lesenswert?

Dann sag ich doch nochmal Danke für die vielen Beispiele und 
Möglichkeiten und das Forum hier ist einfach das Beste =)

Gruß Andreas

von C-Stolperer (Gast)


Lesenswert?

> ...und das Forum hier ist einfach das Beste..


Jau, als Mitlesender hab ich auch wieder was gelernt!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.