The normal use of a union is to store (and retrieve) only one value at a time.
C is somewhat of a medium-level language. It both supports the use of types with various features (integer, floating-point, pointers, arrays, structures, unions, bit fields, combinations of these, and so on) but also allows access to the bytes that represent types.
In C, you can convert a pointer to an object to a pointer to a character type and use that pointer to inspect the bytes of an object.
You are also allowed to store a value to one member of a union and then read the contents using another member. When you do this, the bytes in the union will be reinterpreted as if they represented a value in the type of the member being used.
Serious problems can arise with your program if you do this incorrectly. Inspecting or reinterpreting the bytes of an object should be done only for special purposes. For example, special-purpose math library code targeted for specific hardware may need to manipulate the bytes of floating-point objects. Some code for input/output may need to package objects as streams of bytes that are communicated to other systems or may need to receive streams of bytes and reinterpret them as other objects.
For normal use of a union, you should only read the last member written.