Fix miscompile of large integers.

An integer larger than INT_MAX was emitted as

  MOV $<negative number>, %RAX

instead of

  MOV $<positive number>, %RAX

by mistake. As a result, the number would be sign-extended and
become a wrong value if used as a long int.
Properly type integer literals.

The typing rule is at C11 6.4.4.1p5.