pourquoi sizeof (13.33) vaut 8 octets?

Quand je donne sizeof(a) , où a=13.33 , une variable float, la taille est de 4 octets. Mais si je donne directement sizeof(13.33) , la taille est de 8 octets.

Je ne comprends pas ce qui se passe. Quelqu’un peut aider?

Ce sont les règles de la langue.

13.33 est un littéral numérique. C’est traité comme un double parce que c’est un double. Si vous voulez que 13.33 soit traité comme un littéral float, indiquez 13.33f.

13.33 est un double littéral. Si sizeof (float) == 4, sizeof (13.33f) == 4 devrait également tenir, car 13.33f est un littéral float.

Le littéral 13.33 est traité comme une valeur à virgule flottante double précision de 8 octets de large.

Le 13.33 littéral est traité comme “double”, pas “float”.

Essayez 13.33f à la place.

Le type et la taille de votre variable sont bien. C’est juste que le compilateur a des types par défaut pour les littéraux, ces valeurs constantes codées en dur dans votre programme .

Si vous demandez sizeof(1) , vous aurez sizeof(int) . Si vous demandez sizeof(2.5) , vous obtiendrez sizeof(double) . Ceux-ci pourraient clairement entrer dans un caractère et un float respectivement, mais le compilateur a des types par défaut pour vos littéraux et les traitera comme tels jusqu’à leur affectation.

Vous pouvez toutefois remplacer ce comportement par défaut. Par exemple:

 2.5 // as you didn't specify anything, the comstackr will take it for a double. 2.5f // ah ha! you're specifying this literal to be float 

À votre santé!

Parce que 13.33 est un double , qui est tronqué en float si vous l’assignez. Et un double est 8bytes. Pour créer un véritable float, utilisez 13.33f (notez le f ).