Для следующего кода:Формат и аргументы несогласованность в PRINTF
#include <stdio.h>
int main(){
printf("%f", 5);
printf("%d", 5.01);
}
Первый оператор печати 0,000000 и второе утверждение будет печатать большое количество.
Я думал, что printf видит формат% f, выдает 4-байтовый аргумент из стека. Затем я просмотрел некоторые ссылки, в которых говорится, что функция printf преобразует float в double, поэтому аргумент 8 байтов. Поэтому я подумал, что это может напечатать непредсказуемое значение. Но как он мог распечатать 0,000000.
Второй также проветривается. Бинарный формат для 5.01 должен быть 0 10000001 01000000101000111101100 (0x40A051EC), он должен быть 1084248556 в десятичном формате, но результат этого заявления - 1889785610. Почему это происходит?
[* Если какой-либо аргумент не является правильным типом для спецификатора формата ... тогда поведение не определено. *] (http://stackoverflow.com/a/5851578/1233508) – DCoder
Undef поведение. Порядок байтов. –