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

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