Forum: Compiler & IDEs bit undrehen von 0 nach 1 von 1 nach 0


von Tex A. (tex)


Lesenswert?

Hallo Forenuser
Kann das funktionieren?

  #define togglebit(ADDRESS,BIT) (ADDRESS ^= (1<<BIT))

tex

von johnny.m (Gast)


Lesenswert?

Ja

von Rolf Magnus (Gast)


Lesenswert?

Ja.

von Ingo (Gast)


Lesenswert?

ja

von Wolfram (Gast)


Lesenswert?

ist aber nicht interruptsicher, aber du fragst ja auch nur KANN das
funktionieren.

von Stefan K. (_sk_)


Lesenswert?

Hi tex,

besser, Du klammerst es:

  #define togglebit(ADDRESS,BIT) ((ADDRESS) ^= (1<<(BIT)))

In Deinem Fall kann zwar <relativ> wenig passieren, weil die Priorität
der Operatoren ^= und << sehr niedrig ist. Aber stell Dir diesen Fall
vor:

  #define SQUARE(x) x * x

und dann einen Aufruf mit:

b = SQUARE (a+1)

Wenn das Makro expandiert wird, entsteht folgendes:

b = a + 1 * a + 1

Das Ergebnis ist in diesem Fall falsch, deshalb immer klammern:
  #define SQUARE(x) ((x) * (x))


Grüße, Stefan Kleinwort

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.