Why does uint64_t and unsigned long long not work?

Krupski:
Now the question is... WHY do I have to use that?

The compiler infers the type of the literal constant from its value. I believe the rule for integer values is that if the value will fit in an int the type is int, otherwise the type is long int. If you want it to be any other type, for example long long int, then you have to tell the compiler what type to use.