if anweisung bit abhängig

Gast #994911
Lesenswert?

Hallo ich habe eine Frage ich möchte eine if Anweisung erstellen die 
immer dann "startet" wenn bestimmte bit bedingungen erfüllt sind.

z.B. egal was in messwerte steht wenn an der stelle 0b.......1 eine 1 
ist und bei messwerte[2] an  der stelle 0b.......1. soll die die 
begingung erfüllt sein egal was die anderen bits machen.
1
messwerte[1] = PINB;
2
if ( messwerte )
3
{
4
Programm
5
}
6

7
messwerte[2] = PINC;
8
if ( messwerte )
9
{
10
Programm
11
}
Gast #994962
Lesenswert?

>gibt e da nicht eine schönere lösung
Was gibt es denn daran auszusetzen? Das ist genau das, was Du wolltest. 
Nach dem & schreibst Du den Wert für das Bit, das Du abfragen willst. 
Ganz einfach. Und leserlich ist dann Dein Code auch noch.
Gast #995070
Lesenswert?

kann man eine bestimmet stelle des 0b........ auch auf 0 abfragen.

z.B. 0b..0..1.. das messwert an diesen stellen genau das haben soll.
oder besser gesagt egal wie der code aussieht er soll immer das dritte 
bit ausblenden.
Gast #995125
Lesenswert?

hey ich gebe auf messwerte eine 0b00101110 aber ich komme einfach nicht 
in die if anweisung.
1
if ((messwerte[2]&0b00001000) == 0b00001000)
2
{
3
}

Das mit der Bitmanipulation habe ich geschaft.
Persönliche Seite #995808
Lesenswert?

Verarscht ihr ihn jetzt alle, oder hab ich ein Brett vorm Kopf? (Aus dem 
Standardumgangston hier im Forum schließe ich leider wohl mal eher auf 
ersteres...)

Mein Vorschlag wäre:
1
if (messwerte[2]&&0b00001000)
Noch schönere Alternative (und exakt gleichwertig, aber lesbarer):
1
if (messwerte[2]&&(1<<3))

Das sollte theoretisch reichen, oder? Von sowas wie
1
if ((messwerte[2]&0b00001000) == 0b00001000)
würde ich allerdings abraten, da das höchstwahrscheinlich messwerte[2] 
verändert.

Bei AVRs (kann ohne Controllerangabe ja nur raten...) gibt es aber auch 
den sbrs-Befehl (*S*kip if *B*it in *R*egister is *S*et). Wie man das in 
C direkt einbaut weiß ich allerdings nicht.


Für den Test, ob das Bit nicht gesetzt ist, bietet sich die Negation an:
1
if (!(messwerte[2]&&(1<<3)))

Gruß, CowZ
#995877
Lesenswert?

Lasse S. wrote:

> Das sollte theoretisch reichen, oder? Von sowas wie
>
1
if ((messwerte[2]&0b00001000) == 0b00001000)
> würde ich allerdings abraten, da das höchstwahrscheinlich messwerte[2]
> verändert.

Sorry, aber das ist einfach nur Blödsinn. messwerte[2] wird dabei 
keinesfalls verändert.

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