How to input int64_t / uint64_t constants?

The syntax you are looking for is:

const uint64_t test = 1ULL << 30;

The post-fix ULL is used for unsigned integer literals that are at least 64-bits wide.


You can use the macro:

UINT64_C

to define a 64bit unsigned integer literal, the cstdint header provides macros for defining integer literals of specific sizes, we see that in section 18.4.1 Header synopsis:

The header also defines numerous macros of the form:

and includes:

plus function macros of the form:

[U]INT{8 16 32 64 MAX}_C

We have to go back to the C99 draft standard to find how they work, section 7.18.4.1 Macros for minimum-width integer constants which says:

[...]if uint_least64_t is a name for the type unsigned long long int, then UINT64_C(0x123) might expand to the integer constant 0x123ULL.

as the proper way of defining a 64bit integer constant expression. This is unfortunately not document on cpprefernce but cplusplus.com does document this feature for of the cstdint header as well as the posix reference for stdint.h.