Una pregunta sobre la unión en C: almacenar como un tipo y leer como otro: ¿se define su implementación?

Estaba leyendo acerca de la unión en C de K&R, por lo que entendí, una sola variable en unión puede contener cualquiera de los varios tipos y si algo se almacena como un tipo y se extrae como otro, el resultado se define simplemente como implementación.

Ahora por favor revisa este fragmento de código:

#include<stdio.h>

int main(void)
{
  union a
  {
     int i;
     char ch[2];
  };

  union a u;
  u.ch[0] = 3;
  u.ch[1] = 2;

  printf("%d %d %d\n", u.ch[0], u.ch[1], u.i);

  return 0;
}

Salida:

3 2 515

Aquí estoy asignando valores en elu.ch pero recuperando de ambosu.ch yu.i. ¿Se define la implementación? ¿O estoy haciendo algo realmente tonto?

Sé que puede parecer muy principiante para la mayoría de las otras personas, pero no puedo descubrir la razón detrás de esa salida.

Gracias.

Respuestas a la pregunta(6)

Su respuesta a la pregunta