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


von Gast (Gast)


Lesenswert?

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

1
// Werte von Register Page 1 holen
2
    SPI_write_register(0b01111110,0x00000001);        // Stelle Register Page 1 ein
3
4
    if(measurement_mask_low && (0x00000001 << 31))      // Neue Page + Mask_low
5
    {
6
      measured[31] = SPI_read_register(0);
7
      measured_length++;
8
    }

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?

von Johannes M. (johnny-m)


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...

von (prx) A. K. (prx)


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.

von Gast (Gast)


Lesenswert?

Ach, was für ein blöder Fehler :/

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

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Was soll denn das &&? Du meinst wohl &?

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.