Hallo, ich habe schon oft gesehen, dass an Konstanten ein U, UL, L etc angehängt wird. Der Sinn ist mir schon klar, also dass es für unsigned, unsigned long, long, etc steht. Nur macht es Sinn das an Konstanten anzuhängen? Sollte das nicht der Compiler automatisch erkennen? Das ganze hab ich auch schon mehrmals in Rechnungen gesehn... also z.B. "uint32_t test = 400L * var"; Was würde passieren wenn ich das "L" weglasse? Vielen Dank schonmal ;)
Auf Systemen mit 16-bittigen Ints kommt bei var = 400 mit L 160000 raus, ohne L 28928. Auf Systemen mit 32-bittigen Ints ists in diesem Beispiel wurscht.
Johannes G. schrieb: > Das ganze hab ich auch schon mehrmals in Rechnungen gesehn... > also z.B. "uint32_t test = 400L * var"; > Was würde passieren wenn ich das "L" weglasse? Wenn es sich um ein System mit 16 Bit ints handelt (etwa avr-gcc) und var nicht größer als 16 Bit ist, dann wird die Rechnung per default in 16 Bit ausgeführt, dann auf 32 Bit Unsigned gewandelt und an test zugewiesen. Mit 400L wird die Rechnung als long (vermutlich 32 Bit in dem Beispiel) ausgeführt. Ein gewaltiger Unterschied, falls die Rechnung in 16 Bit überlaufen könnte.
Wenn du dir nicht sicher bist, wohin die Reise geht, könntest du z.B. stdint.h benutzen. Dort gibts dann Makros für Konstanten, die im Zweifelsfall die Suffixe anbringen.
Andreas B. schrieb: > Johannes G. schrieb: >> Das ganze hab ich auch schon mehrmals in Rechnungen gesehn... >> also z.B. "uint32_t test = 400L * var"; >> Was würde passieren wenn ich das "L" weglasse? > > Wenn es sich um ein System mit 16 Bit ints handelt (etwa avr-gcc) und > var nicht größer als 16 Bit ist, dann wird die Rechnung per default in > 16 Bit ausgeführt, dann auf 32 Bit Unsigned gewandelt und an test > zugewiesen. Nur wenn var eine 16- oder 8-Bit Variable ist. Ist var >= 32 Bit, dann wird die Rechnung natürlich in entsprechender Weite durchgeführt.
Johann L. schrieb: >> Wenn es sich um ein System mit 16 Bit ints handelt (etwa avr-gcc) und >> var nicht größer als 16 Bit ist, > > Nur wenn var eine 16- oder 8-Bit Variable ist. 16- und 8-Bit-Variablen gehören zu denen, die nicht größer als 16 Bit sind.
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.