Forum: Mikrocontroller und Digitale Elektronik MSPGCC, Shiftleft nicht mit 24 Stellen ?


von hilfesuchender (Gast)


Lesenswert?

Hallo,

bei mir gibt es mit dem MSPGCC Probleme, wenn im nachfolgenden Code der 
Wert von si grösser als ca. 20 ist.
Bei kleineren Werten von "si" klappt das ganze einwandfrei.

ui_tmp = ui_tmp + (1<<si);

Wenn ich den Wert von "ui_tmp" mit 65536 multipliziere (also um 16 
Stellen nach links schiebe), dann ergibt sich der richtige Wert, der 
Compiler kann so grosse Zahlen also verarbeiten.

Die betreffenden Variablen sind alle als "unsigned long" definiert.

von (prx) A. K. (prx)


Lesenswert?

1 ist vom Typ int und der hat nur 16 Bits. Ein Shift um mehr als 16 ist 
daher undefiniert. Die Typen drum herum sind dafür nicht relevant.

von hilfesuchender (Gast)


Lesenswert?

aaaaah, danke.

Könnte sich da mit Typkonvertierung von 1 in (unsigned long) was machen 
lassen, z.B.

ui_tmp = ui_tmp + ( (unsigned log)1 <<si);

Habe das Projekt schon geschlossen.

von hilfesuchender (Gast)


Lesenswert?

ok,

mit der Typkonvertierung klappt es.

ui_tmp = ui_tmp + ((unsigned long)1<<si);

von (prx) A. K. (prx)


Lesenswert?

(1UL<<si) tut es auch.

von gastlich (Gast)


Lesenswert?

Wie unsauber !!!

einen ul mit einem ui addieren und das ganze im ui speichern ????

da geht immer was verloren !!!!

gruss Claudio

von hilfesuchender (Gast)


Lesenswert?

der ui ist auch vom Typ long, der Name war nur noch nicht entsprechend 
geändert. Trotzdem danke.

von Stefan E. (sternst)


Lesenswert?

hilfesuchender schrieb:
> der ui ist auch vom Typ long, der Name war nur noch nicht entsprechend
> geändert. Trotzdem danke.

Was einer der Gründe ist, warum diese "ungarischen Notation" Unsinn ist.

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.