Forum: Compiler & IDEs alle bits einens char prüfen


von 4017 (Gast)


Lesenswert?

Hallo, ich möchte eine Variable seriell also bitweise auf einen Pin 
ausgeben.
Das Problem ist das es so nicht läuft wie ich mir das gedacht habe.

in etwa so:
unsigned char var=0x50;
unsigned char maske=0x01


If(var & maske){ //soll prüfen ob ein bestimmtes bit gesetzt ist
   tu irgendwas
}else blabla;

maske+=maske;//zur erhöhung der maske um das nächste bit zu prüfen
             // z.B 0x01=>0x02=>0x04=> ...



Das ganze dann noch in einer for-schleife verpackt von 0 bis 7 
natürlich;

Das Problem ist das die Bedingung wohl nie erfüllt ist und er immer nur
auf else springt?Selbst wenn ich 0xff eingebe, passiert nichts.

Brauch das ganze für ein schieberegister.

von maske (Gast)


Lesenswert?

>maske+=maske;
1
maske=1;
2
...
3
maske<<=1;

von Stefan E. (sternst)


Lesenswert?

Mit "in etwa so" kann man nichts anfangen.
Wenn du konkrete Hinweise auf das Problem erwartest, dann zeige auch den 
konkreten Code.

von Andreas B. (andreas_b77)


Lesenswert?

maske schrieb:
>>maske+=maske;
> maske=1;
> ...
> maske<<=1;

Eine Zahl auf sich selbst addieren ist das selbe wie sie mit zwei zu 
multiplizieren ist das selbe wie sie um eine Stelle nach links zu 
schieben.

Also liegts daran nicht, der Fehler ist nicht im gezeigten Fragment (wo 
nicht mal eine Schleife enthalten ist).

von maske (Gast)


Lesenswert?

Andreas B. schrieb:
> Eine Zahl auf sich selbst addieren ist das selbe wie sie mit zwei zu
> multiplizieren ist das selbe wie sie um eine Stelle nach links zu
> schieben.
Wo du Recht hast... Zu schnell!

von Tg (Gast)


Lesenswert?

Die Bit-Prüfung muss so aussehen:

If((var & maske) == maske)
{
    // Bit ist 1
}
else
{
    // Bit ist 0
}

von STK500-Besitzer (Gast)


Lesenswert?

Tg schrieb:
> Die Bit-Prüfung muss so aussehen:
>
> If((var & maske) == maske)
> {
>     // Bit ist 1
> }
> else
> {
>     // Bit ist 0
> }

oder so:
1
if (!(var & maske))
2
{
3
    // Bit ist 0
4
}
5
else
6
{
7
    // Bit ist 1
8
}

Wenn das Bit nicht gesetzt ist, wird der Ausdruck in der Klammer 0, was 
für C bedeutet, dass es falsch ist.

von Walter S. (avatar)


Lesenswert?

Tg schrieb:
> Die Bit-Prüfung muss so aussehen:
>
> If((var & maske) == maske)
> {
>     // Bit ist 1
> }
> else
> {
>     // Bit ist 0
> }

kann man machen, aber so gehts auch:
if (var & maske )

von Noname (Gast)


Lesenswert?

>kann man machen, aber so gehts auch:
>if (var & maske )

Genau. Das sind alles Varianten die (mit Ausnahme der Negation) alle das 
selbe tun. Nur lösen sie das Problem nicht.

Der Codeausschnitt, (wenn man das mal so nennen möchte) ist korrekt und 
sollte wie erwartet funktionieren, falls alles andere darum herum auch 
korrekt ist.

Das ist eben die Frage: Wie sieht das drumherum aus?

Und woran erkennst Du konkret, das etwas nicht so läuft wie gewünscht?
>...das die Bedingung wohl nie erfüllt ist...
Was heisst hier "wohl"? "Ja" oder "Nein" oder "Weiss nicht". Mehr 
Möglichkeiten gibt es nicht.

von Rolf Magnus (Gast)


Lesenswert?

4017 schrieb:
> in etwa so:

Und wie ist es tatsächlich? Bitte nicht irgendeinen für das Posting 
frisch eingetippten Code, sondern den, bei dem du das beschriebene 
Verhalten beobachtet hast.

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.