2009-09-05 14 views

Respuesta

14

Un literal 0 se considera que es un int literal; literal 0.0 es un literal double. Al asignar a double, cualquiera de los dos funcionará (dado que el int se puede convertir en una conversión de ampliación); sin embargo, la conversión de 0.0 a int es una conversión de reducción, y debe hacerse explícitamente; es decir, (int)0.0.

+2

y 0.0f es un valor flotante. : D –

+2

@Rob, ¿está diciendo que un doble no se puede convertir implícitamente en un int? Considera 'int a = 0.0;'. –

+1

Un doble ciertamente puede asignarse a un int sin un molde explícito. Esta parte de la respuesta necesita ser revisada. –

5

Uno parece ser un entero literal, el otro un punto flotante literal. Realmente no le importa al compilador si inicializa flotantes o dobles con literales enteros. En cualquier caso, el literal se compilará en una representación interna.

Tiendo a sugerir 0.0 para que su intención (a otros programadores) quede explícitamente clara.

7

Intento mantener mis constantes homogéneas. 0 para los ints. 0.0f o 0.f para flotar y 0.0 para doble.

Para mí, la razón más importante para hacer esto es que el compilador y el programador vean lo mismo.

Si hago esto ...

float t=0.5f; 
float r; 

r= 1 * t; 

... debe ser asignado r 0 o 0.5? No hay dudas si hago esto en su lugar ...

float t=0.5f; 
float r; 

r= 1.0f * t; 
+0

0.f suena como un valor de punto flotante hexadecimal :) –

+1

Sí, C tiene problemas si alguna vez quiere admitir literales hexadecimales de punto flotante, ¿no es así? :-) – Nosredna

+0

¿Puede elaborar por favor? ¿Por qué se le hubiera asignado alguna vez 0? – pingu

Cuestiones relacionadas