2009-08-31 14 views
11

¿Cuál es la diferencia entre sizeof (3.0) y sizeof (3.0f)sizeof flotador (3,0) vs (3.0f)

que estaba esperando a ambos para dar el mismo resultado (sizeof flotar) .. pero es diferente.

En la máquina de 32 bits, el compilador gcc, sizeof (3.0f) => 4 sizeof (3,0) => 8

¿Por qué?

Respuesta

24

Porque 3.0 es un doble. Ver C syntax Floating point types.

Las constantes de coma flotante pueden ser escritas en notación decimal, p. Ej. 1.23. La notación científica se puede usar al sumar e o E seguido de un exponente decimal , p. Ej. 1.23e2 (que tiene el valor 123 de ). Se requiere un exponente decimal o (de lo contrario, el número es una constante entera). C99 introdujo las constantes de coma flotante hexadecimales, que siguen reglas similares excepto que deben ser con el prefijo 0x y usan p para especificar un exponente hexadecimal . Tanto decimal como constantes de coma flotante hexadecimales pueden tener el sufijo f o F para indicar una constante de tipo flotante, por l o L a indicar tipo double long, o left unsuffixed para una constante doble.

+0

y 3.0f es un flotador. – stonemetal

+0

Tanto las constantes decimales como las hexadecimales de coma flotante pueden tener el sufijo f o F para indicar una constante de tipo float, en l o en L para indicar double type long o left unsuffixed para una constante doble. => es demasiado rápido para obtener una respuesta aquí :) – kumar

10
  • 3.0f es flotador (4 bytes)
  • 3,0 es el doble (8 bytes)

more info

6

3,0 es un double, no un float.

doubles son dos veces más anchos que float s.

EDITAR: 3.0d es sólo en C#

+0

No hay un sufijo de punto flotante 'd' ('l' y 'L' dan doble largo, 'f' y 'F' dan float y no tienen sufijo da un doble) – AProgrammer

+0

Fijo; Gracias. – SLaks

+0

En IEEE754 'double' es el doble de ancho que' float'; C no requiere IEEE754 sin embargo. –