Forum: Mikrocontroller und Digitale Elektronik (unsigned long) Ausdruck


von Martin (Gast)


Lesenswert?

x = (unsigned long) ( 0x1   << ((a-1)%b)) ;

y =                   0x1ul << ((a-1)%b) ;

Hallo,

der zweite Ausdruck (Keil-Compiler, C für 8051) funktioniert 
einwandfrei.

Warum funktioniert der erste Ausdruck nicht? Ist der 'cast' nicht auch 
eine Aufforderung an den Compiler den Ausdruck in 'unsigned long' zu 
berechnen?

Martin

von Christian Z. (christianz)


Lesenswert?

0x1 ist ein int, der Cast auf unsigned long wird erst ausgeführt, 
nachdem die Berechnung und ggf. der Überlauf schon passiert sind.

von lkmiller (Gast)


Lesenswert?

Nein,
der Cast im 1. Fall ist die Anweisung an den Compiler,
das Ergebnis als unsigned long zu betrachten.

0x1 ist integer und das sind hier 16 Bit,
und damit wird nur auf short gerechnet.

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.