I agree that gcc looks right here. The only way that avoiding the and would be ok is if the compiler would decide to represent unsigned char's as `the bottom 8 bits with junk in the top', which I guess it could, but I have never seen.