mikrocontroller.net

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


Autor: Andreas Kramer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Zip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if ((mybyte && 0x04)==0x04)) {  ..          }

Z.

Autor: Sonic (Gast)
Datum:

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

Ist doch einfacher.

Autor: Sonic (Gast)
Datum:

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

Autor: Sonic (Gast)
Datum:

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

Autor: sven s. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if (mybyte & (1<<mybit))
{
}

@sonic
ist doch nicht so schwer oder ...

Autor: Andreas Kramer (Gast)
Datum:

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

Gruß Andreas

Autor: guro (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich werde jetzt Feierabend machen ;-)

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

Oder?

Autor: Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if (!((mybyte & 0x09) >= 0)))

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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 )

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo, so geht's auch ;-)

Autor: Andreas Kramer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: C-Stolperer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ...und das Forum hier ist einfach das Beste..


Jau, als Mitlesender hab ich auch wieder was gelernt!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.