I don't understand the output in the following C code:

```
#include <stdio.h>
int main()
{
   union U
   {
      int i;
      char s[3];
   } u;
   u.i=0x3132;
   printf("%s", u.s);
   return 0;
}

```

Initial memory is `32` bits and is the binary value of `0x3132` which is 

`0000 0000 0000 0000 0011 0001 0011 0010`.

If the last three bytes of `0x3132` are the value of `s` (without leading zeroes), then `s[0]=0011,s[1]=0001,s[2]=0011`.

This gives the values of `s=0011 0001 0011=787`.

**Question**: Why the output is `21` and not `787`?