U, L, UL, etc an Konstanten sinnvoll?

OP #2279471
Lesenswert?

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 ;)
#2279494
Lesenswert?

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.
Persönliche Seite #2279516
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren