Bitshift-Problem

Gast #629080
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!
Gast #629262
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.