Forum: Mikrocontroller und Digitale Elektronik Unterschied zw. (1 << x) und (1L << x)


von Anf (Gast)


Lesenswert?

Hallo Leute!

Kann mir vielleicht einer erklären wo der Unterschied zwischen
( 1 << x ) und ( 1L << x) liegt.

Es geht um folgendes:

unsigned long y = 0;
unsigned char  x;

...

y |= ( 1 << x );  // oder auch  y |= ( 1L << x)

Die Variable x wird im Programm abwechselnd die Werte 0  bis 31 
annehemen.

Würde mich über eine Antwort sehr freuen.

Gruß

Anf

von Benedikt K. (benedikt)


Lesenswert?

Ohne dass L wird nur mit Int gerechnet, oberhalb von x=15 sind die Werte 
daher undefiniert. Mit L wird mit long gerechnet, es funktioniert also 
bis x=31

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Benedikt K. wrote:
> Ohne dass L wird nur mit Int gerechnet, oberhalb von x=15 sind die Werte
> daher undefiniert.
int kann durchaus "per default" ein 32-bit Datentyp sein und das L wäre 
dann überflüssig. Nichts desto trotz verdeutlicht ein L auch in diesem 
Fall was gemeint ist (32-bit) und macht den Code auch portabler, falls 
man diesen auf einem "int<32bit" System verwenden will.

von Anf (Gast)


Lesenswert?

Großen Dank an Benedikt K. und Martin Thomas. Jetzt ist mir klar warum 
mit der Anweisung y |= ( 1 << x ); ab x > 15 nur Müll rauskam und was 
das 1L bedeutet.

Danke Leute!!!

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.