2009-08-31 9 views
11

Was ist der Unterschied zwischen sizeof (3.0) und sizeof (3.0f)sizeof Schwimmer (3,0) vs (3.0f)

Ich war beide erwarten das gleiche Ergebnis (sizeof float) zu geben .. aber es ist anders.

in 32-Bit-Maschine, gcc Compiler, sizeof (3.0f) => 4 sizeof (3,0) => 8

Warum?

Antwort

24

Weil 3.0 ein Doppel ist. Siehe C syntax Floating point types.

Gleitkommakonstanten können in Dezimalschreibweise, z. 1.23. Die wissenschaftliche Notation kann verwendet werden, indem e oder E gefolgt von einem dezimalen Exponenten, z.B. 1.23e2 (welches den Wert 123 hat). Entweder ein Dezimalpunkt oder ein Exponent ist erforderlich (ansonsten die Zahl ist eine ganze Zahl Konstante). C99 führte hexadezimale Gleitkommakonstanten ein, die ähnliche Regeln folgen, außer dass sie mit Präfix 0x sein müssen und P verwenden, um einen hexadezimalen Exponenten anzugeben. Sowohl dezimal als auch hexadezimale Gleitkommakonstanten können mit f oder F ergänzt werden, um eine Konstante vom Typ float, von l oder L bis Typ long double oder unsuffixed für eine doppelte Konstante anzugeben.

+0

und 3.0f ist ein Schwimmer. – stonemetal

+0

Sowohl die dezimalen als auch die hexadezimalen Gleitkommakonstanten können mit f oder F als Suffix für eine Konstante vom Typ float, mit l oder L als Typ für long double oder links ohne suffix für eine double-Konstante versehen werden. => es ist zu schnell, um eine Antwort hier zu bekommen :) – kumar

10
  • 3.0f ist Schwimmer (4 Byte)
  • 3.0 ist double (8 Bytes)

more info

6

3,0 ist ein double, kein float.

doubles sind doppelt so breit wie float s.

EDIT: 3.0d nur in C#

+0

Es gibt kein 'd' Gleitkomma-Suffix ('l' und 'L' geben lange Doppel, 'f' und 'F' geben float und Abwesenheit eines Suffix gibt ein Doppel) – AProgrammer

+0

Fixed; Vielen Dank. – SLaks

+0

In IEEE754 ist 'double' doppelt so breit wie' float'; C benötigt IEEE754 jedoch nicht. –