You've specified the type of the object, not the type of the literal. An integer literal without any suffix has the type signed int, which means you can't have a value that exceeds the range of signed int. That's why the suffixes are there, so that you can create a literal that fits a larger type than the default.
 Compilers will generally warn you to that effect, but still treat the code as if you used a suffix. This is a convenience only, and not required.