Casting a negative value??

A union, neat idea!

(Though I'd have used uint16_t and uint8_t)