www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik left shift count >= width of type


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich habe folgende Fehlermeldung:
../Main.c:377: warning: left shift count >= width of type
Hier der Code dazu:

// Werte von Register Page 1 holen
    SPI_write_register(0b01111110,0x00000001);        // Stelle Register Page 1 ein

    if(measurement_mask_low && (0x00000001 << 31))      // Neue Page + Mask_low
    {
      measured[31] = SPI_read_register(0);
      measured_length++;
    }

Der Fehler ist bei folgender Zeile:

if(measurement_mask_low && (0x00000001 << 31))

measurement_mask_low ist als uint32_t definiert, warum funktioniert das 
nicht? Wenn ich das 0te Bit um 0 verschiebe, bleibt es ja beim 0ten Bit. 
Wenn ich es um 1 verschiebe, kommt es auf Bit 1. Dann muss doch beim 
verschieben um 31 auf Bit 31 kommen. Allerdings sagt es mir den 
Fehler... Ich kann maximal um 15 verschieben. Warum?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast wrote:
> measurement_mask_low ist als uint32_t definiert,
Schön, 0x00000001 ist aber defaultmäßig ein int, da bringen auch die 
ganzen Nullen nix! Da musst Du dem Compiler schon explizit sagen, dass 
er das als unsigned long interpretieren soll. Schreib einfach 1UL da 
hin, und gut ist...

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst 1000 Nullen vor die 1 schreiben, solange dar magische 
Buchstabe "L" fehlt bleibt die vom Typ "int", und wenn der nur 16 Bits 
hat, dann sind 31 zu viel.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach, was für ein blöder Fehler :/

Danke aufjedenfall, da hätte ich auch selbst drauf kommen können....

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll denn das &&? Du meinst wohl &?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.