Abfrage ob bits gesetzt in "C"

OP #4155423
Lesenswert?
• ▲
▼
Hallo
http://www.mikrocontroller.net/articles/Bitmanipulation

ich habe da ein Problem mit C und weiß nicht genau wie ich das
hinbekomme

Bei

 // prüfe ob Bit 0 und Bit 4 in der Variable tmp gesetzt sind
    // die Klammer ist wichtig!
    if ((tmp & 0x0011) == 0x8100) {


darf nur bit 15 und 8 gesetzt sein.

Wie bekomme ich ein "true",
bei z.B. 0xA301.
Persönliche Seite #4155429
Lesenswert?
• ▲
▼
Martin Michael schrieb:
> // prüfe ob Bit 0 und Bit 4 in der Variable tmp gesetzt sind
>     // die Klammer ist wichtig!
>     if ((tmp & 0x0011) == 0x8100) {
>
> darf nur bit 15 und 8 gesetzt sein.

Das widerspricht sich.

Bit 0 und 4 oder Bit 15 und 8? Welches Schweinderl hätten's gern?

>     if ((tmp & 0x0011) == 0x8100)

Dieser Ausdruck trifft nie zu.

Das Resultat von tmp & 0x11 kann nur noch die Werte 0x00, 0x01, 0x10 und 
0x11 annehmen -- daher ist ein Vergleich mit einer anderen Konstanten 
nie zutreffend.
#4155487
Lesenswert?
• ▲
▼
Martin Michael schrieb:
> Ja
> Dumm von mir
> if ((tmp & 0x8100) == 0x8100) {

funktioniert nicht. Wenn z.B.

tmp = 0x8101

ist, wird der Inhalt der Klammer zu 0x8100 und die if-Bed. anschließend 
zu TRUE. Mit obigem Vergleich kann Du testen, ob mindestens Bit 15 und 
Bit 8 gesetzt sind.

Wenn Du auschließlich auf Bit 15 und Bit 8 testen willst:

if (tmp == 0x8100)


Zum Testen/Spielen:

printf("%#010x\n",(tmp & 0x8101));
Gast #4155566
Lesenswert?
• ▲
▼
Wenn man Bits abfragen will, darf man das übrigens auch genau so 
hinschreiben und das optimierende Bitschubsen dem Compiler überlassen.
1
#define SOMMER  (1 << 15)
2
#define REGEN   (1 << 8)
3

4
if ((tmp & SOMMER) && (tmp & REGEN))
5
{
Gast #4158079
Lesenswert?
• ▲
▼
Die Profis waren das nicht. Das war ein böser Norweger. :-)

Es geht darum, das man mittels Konstanten ein Bit in einem Register 
identifiziert. Soviel ist ja klar.

Dabei hat man mindestens zwei Möglichkeiten zur Wahl;

1. Man nimmt als Wert denjenigen, der sich bei (hexadezimaler, 
dezimaler, oktaler etc.) Interpretation des (als einzigem) gesetzten 
fraglichen Bits ergibt.
2. Man nimmt als Wert die Nummer des Bits um das sich handelt. (Von 
rechts, ab 0 gezählt).

Derjenige welcher hat sich für Variante 2. entschieden. Das ist alles.

Antwort schreiben

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.

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.