Hallo! Ich möchte im IAR Embedded Workbench 8015 testen, ob das 8. Bit gesetzt ist. if (array[1] & (1 << 7) != 0) ich schiebe also 1 um 7 weiter, erhalte also 0x80, einmal UND und wenn die ungleich 0 ist, dann müsste Bit8 ja 1 sein. Irgendwie kommt das Programm aber nie in diese Bedingung. Änder ich die Bedingung in if (argument[1] >= 128) dann funktioniert es einwandfrei. Warum funktioniert die obere Variante nicht und wie löst man sowas im Allgemeinen - die untere Variante gefällt mir nicht. Grüße Jan
besser so: if ((x & (1<<7)) != 0) also mit klammern, da sollte kein compiler was verwechseln. ansonsten: von welchem datentyp ist dein array? ist es ein signed-typ, dann kann es schon problematisch werden mit bits-tests.
Hm - stimmt. Das könnte natürlich sein. Werd ich austesten! Danke! Der Array ist char - aber unsigned, sollte also kein Problem darstellen. Viele Grüße Jan
if (array[1] & (1 << 7) != 0) wird aufgrund der Operator-Prioritäten vom Compiler als if (array[1] & ((1 << 7) != 0)) also if (array[1] & 1) interpretiert.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.