warum ist die Größe von (13.33) 8 Bytes?

8

Wenn ich sizeof(a) gebe, wo a=13.33 , eine float-Variable, ist die Größe 4 Bytes. Aber wenn ich sizeof(13.33) direkt gebe, ist die Größe 8 Bytes.

Ich verstehe nicht, was passiert. Kann jemand helfen?

    
karthik 30.05.2013, 08:39
quelle

5 Antworten

44

Das sind die Regeln der Sprache.

13.33 ist ein numerisches Literal. Es wird wie ein Doppel behandelt, weil es ein Doppel ist. Wenn Sie möchten, dass 13.33 als Float-Literal behandelt wird, geben Sie 13.33f.

an

13.33 ist ein doppeltes Literal. Wenn sizeof (float) == 4, sollte sizeof (13.33f) == 4 auch gelten, weil 13.33f ein Fließkomma-Literal ist.

    
karthik 04.04.2011, 10:36
quelle
19

Das Literal 13.33 wird als ein Gleitkommawert mit doppelter Genauigkeit und einer Breite von 8 Byte behandelt.

    
David Heffernan 04.04.2011 10:35
quelle
13

Das 13.33-Literal wird als "doppelt" und nicht als "float" behandelt.

Versuchen Sie stattdessen 13.33f.

    
Will Dean 04.04.2011 10:35
quelle
9

Der Typ und die Größe Ihrer Variablen sind in Ordnung. Der Compiler verfügt nur über Standardtypen für Literale, die in Ihrem Programm fest programmiert sind .

Wenn Sie sizeof(1) anfordern, erhalten Sie sizeof(int) . Wenn Sie sizeof(2.5) anfordern, erhalten Sie sizeof(double) . Diese würden eindeutig in ein char bzw. float passen, aber der Compiler hat Standardtypen für Ihre Literale und behandelt sie als solche bis zur Zuweisung.

Sie können dieses Standardverhalten jedoch überschreiben. Zum Beispiel:

%Vor%

Prost!

    
slezica 04.04.2011 10:42
quelle
8

Weil 13.33 ein double ist, wird es auf ein float gekürzt, wenn Sie es zuweisen. Und ein double ist 8 Bytes. Verwenden Sie 13.33f (beachten Sie f ), um einen echten Gleitkommawert zu erstellen.

    
Xeo 04.04.2011 10:35
quelle

Tags und Links