2017-06-17 1 views
-5
#include <stdio.h> 

int main() 
{ 
    int x = 3; 
    float y = x>10; 
    printf("y is %f",y); 
} 

également si x<10 la sortie est 1.0000?Pourquoi la sortie de y, 0.000?

Ma tentative

Alors x est 3 et x<10 étant le rendement réel de 1,00 et x>10 étant faux retour 0.00 mais pourquoi est flottant agissant comme bool. Pourquoi ne restituez-vous pas une valeur de déchets?

+4

"Pourquoi y ne pas retourner une valeur d'ordures?" - Pourquoi ça devrait? Et s'il vous plaît fournir une référence à la norme définissant "valeur de déchets". Qu'est-ce que c'est? – Olaf

+0

@UnholySheep: C très bien a un type ** bool ** ean: '_Bool' et fournit un en-tête définissant la macro' bool'. – Olaf

+0

Certainement, la sortie était '" 1.000000 "' et non '" 1.0000 "'. La vraie transcription est souvent importante pour résoudre les problèmes. – chux

Répondre

5

Selon la norme C (6.5.8) Les opérateurs relationnels

6 Chacun des opérateurs < (inférieur),> (supérieur à), < = (inférieur ou égal à ), et> = (supérieur ou égal à) doit céder 1 si la relation spécifiée est vrai et 0 dans le cas false.107) le résultat a type int

Attribution d'une valeur de nombre entier à une o bject de type float est une opération bien définie.

En fait, vous pouvez considérer ce code snippet

int x = 3; 
float y = x>10; 

comme

int temporary = 0; // x > 10 
float y = temporary;