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
0x1 ist ein int, der Cast auf unsigned long wird erst ausgeführt, nachdem die Berechnung und ggf. der Überlauf schon passiert sind.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.