Как этот printf работает в этой программе? - PullRequest
1 голос
/ 20 марта 2012

Нужно уточнить ...

Почему я получаю 2.50 0 0 0.0 в качестве вывода?

#include<stdio.h>
int main()
{
    float a=5.0,b=2.0;
    printf("%f %d\n",a/b,a/b);
    printf("%d %f",a/b,a/b);
    return 0;
}

1 Ответ

4 голосов
/ 20 марта 2012

Вы вызываете неопределенное поведение , поскольку тип a/b (повышен до) double, который не соответствует спецификатору формата %d (который ожидает int).

(Причина, по которой вы видите 0, возможно, заключается в том, что все байты sizeof(int), к которым вы получаете доступ, равны нулю, являясь частью (очень короткой) мантиссы простого числа, такого как 2.5, и ваша платформа хранит Числа с плавающей запятой как IEEE754 в порядке с прямым порядком байтов:

    |        <-- * -->         // * = sizeof(int)
400 | 4 0000 0000 0000         // == 2.5
S+E | Mantissa

Попробуйте 2./5., чтобы увидеть другие результаты.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...