Результат выражения 5.0 + 2
имеет тип double
, так как по крайней мере один из двух операндов оператора +
здесь представляет собой значение с плавающей запятой / двойное значение (поэтому другой будет преобразован в double
перед добавлением).
Если вы напишите printf("%d\n", 5.0 + 2)
, вы передадите значение с плавающей запятой, где спецификатор формата фактически ожидает int
.Это несоответствие является неопределенным поведением, и 0
, который вы получите, может быть чем-то другим (другое число, сбой, .... что-нибудь), тоже.
int num = 5.0 + 2
, напротив, преобразуетdouble
-значение, полученное в результате 5.0 + 2
возврата к целочисленному значению (исключая любую дробную часть).Таким образом, значение num
будет 7
и будет, поскольку num
является целочисленным типом, действительным в сочетании со спецификатором формата %d
затем.