Although I can't replicate those oddball results, part of the problem is because the addition operator has higher precedence than left or right shift. The statement "a = b<<8 + c;" compiles as if it were written "a = b << (8+c);" not the way that it looks "a = (b<<8) + c;"
Pete