C Союз и одновременное назначение членам
В следующем коде
#include<stdio.h>
int main()
{
union myUnion
{
int intVar;
char charVar;
float floatVar;
};
union myUnion localVar;
localVar.intVar = 10;
localVar.charVar = 'A';
localVar.floatVar = 20.2;
printf("%d ", localVar.intVar);
printf("%c ", localVar.charVar);
printf("%f ", localVar.floatVar);
}
Я понимаю, что союз может содержать только одно значение за раз. Поэтому, когда я присваиваю значение char, int будет перезаписываться, а затем, когда я назначаю floatValue, char перезаписывается. Так что я ожидал некоторых значений мусора для переменных типа int и char и 20.200000 для переменной типа float, поскольку это было последнее назначенное значение. Но следующий вывод я получаю на VS Express, а также GCC
1101109658 Ü 20.200001
не в состоянии понять, почему значение с плавающей запятой изменяется?
1 ответ
Это не имеет ничего общего с union
и float
значение не изменилось.
Просто не хватает битов для представления 20.2
точно как бинарный поплавок. Но это нормально, ни у кого нет такого количества битов.
Вы должны прочитать, что каждый компьютерный ученый должен знать об арифметике с плавающей точкой.