Forum: Compiler & IDEs Bitshift-Problem


von peter (Gast)


Lesenswert?

hallo allerseits!
hab ein kleines bitshift problem und weiß nicht warum.
der compiler bringt die warnung "left shift count >= width of type" bei 
folgenden Abschnitt - warum?

u32 temp_io;
.
.
.
if((temp_io & (1<<19)) == 0)
  lcdPrintChar('_');
else
  lcdPrintChar(0xFF);

vielleicht kann mri jemand helfen - danke im voraus!

von Tippgeber (Gast)


Lesenswert?

Mach mal aus:
if((temp_io & (1<<19)) == 0)

if((temp_io & (1L<<19)) == 0)

von peter (Gast)


Lesenswert?

danke Tippgeber - jetzt gehts. wieder so eine 16bit falle *ggg
schönen abend noch

von Tippgeber (Gast)


Lesenswert?

Das einer mal danke sagt ist ja auch mal nett ;-)
Gutes Gelingen weiterhin.

Aber, Fallen gibts noch viele.

von Rolf Magnus (Gast)


Lesenswert?

Der Vollständigkeit halber noch eine kurze Erklärung dazu.

> if((temp_io & (1<<19)) == 0)

1 ist vom Typ int, daher ist auch (1<<19) von diesem Typ. Auf Systemen, 
bei denen int 16 Bit groß ist, wie z.B. AVR bekommt man daher die 
gezeigte Compilermeldung, denn einen 16-Bit-Wert um 19 Bits zu 
verschieben ist nicht sinnvoll. Das Ändern in 1L sorgt dafür, daß der 
Typ long und damit mindestens 32 Bit groß ist.

von Tippgeber (Gast)


Lesenswert?

Ich nehm mal an, das der OP sich das schon so gedacht hat ;-)
Aber gut und kurz erklärt.

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.