You shouldn't get garbage (as in completely unpredictable) values.
Narrowing conversions to signed types when the value won't fit in the target type will either be implementation-defined or they'll raise a signal (6.3.1.3p3).
If they don't raise a signal, you can verify absence of information loss by checking the values and signs of the source and destination are the same.
(If you store into unsigneds, the conversion will always be well defined, and you'll only need to compare the values (no signs in unsigned types) to verify absence of information loss.)