Unexpected unsigned-to-signed promotion

compiled (with gcc) and run on my Mac desktop displays the expected 0x80 << 8: 8000. The actual behavior then seems to be implementation dependent.

Size (of "int") matters.