2009-08-31 6 views
11

Quelle est la différence entre sizeof (3,0) et sizeof (3.0f)de float (3,0) vs (3.0f)

Je me attendais les deux pour donner le même résultat (float sizeof) .. mais c'est différent.

Dans 32 bit machine, compilateur gcc, sizeof (3.0f) => 4 sizeof (3,0) => 8

Pourquoi?

Répondre

24

Parce que 3.0 est un double. Voir C syntax Floating point types.

Les constantes à virgule flottante peuvent être écrites en notation décimale, par ex. 1,23. La notation scientifique peut être utilisée en ajoutant e ou E suivi d'un exposant décimal , par ex. 1,23e2 (qui a la valeur 123). Un point décimal ou un exposant est nécessaire (sinon, le nombre est une constante entière). C99 introduit hexadécimal constantes à virgule flottante, qui suivent des règles similaires, sauf qu'ils doivent être préfixé par 0x et utiliser p pour spécifier un exposant hexadécimal . Les constantes hexadécimales à virgule flottante peuvent être suffixées par f ou F pour indiquer une constante de type float, de l ou L à indiquent le type double long, ou gauche non suffixé pour une constante double.

+0

et 3.0f est un flotteur. – stonemetal

+0

Les constantes décimales et hexadécimales à virgule flottante peuvent être suffixées par f ou F pour indiquer une constante de type float, par l ou L pour indiquer type long double, ou left non suffixe pour une double constante. => c'est trop rapide pour obtenir une réponse ici :) – kumar

10
  • 3.0f est flotteur (4 octets)
  • 3.0 est double (8 octets)

more info

6

3,0 est un double, pas un float.

doubles sont deux fois plus larges que float s.

EDIT: 3.0d est seulement en C#

+0

Il n'y a pas de suffixe virgule 'd' ('l' et 'L' donnent double long, 'f' et 'F' donnent float et absence de suffixe donne un double) – AProgrammer

+0

Fixe; Merci. – SLaks

+0

Dans IEEE754 'double 'est deux fois plus large que' float'; C ne nécessite pas IEEE754 cependant. –