https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92659
--- Comment #2 from Jonny Grant <jg at jguk dot org> --- (In reply to Xi Ruoyao from comment #1) > Is it appropriate? > > Though on both 32-bit and 64-bit x86 "1ul" is good for a size_t, but I > believe there is some platform where "1ull" is necessary. > > Maybe I'm wrong. But if I'm correct, suggesting "1ul" is encouraging bad > code. I'll use "(size_t) 1 << 32" for this. UL means Unsigned Long, so if that type is also 64bit like size_t, then it is fine. I would rather use the real type, if the compiler is too stupid to start with a type big enough... the same code with 5147483647 works fine, because the compiler starts with the number as a 'long int' which is already 64bit, no suffix required. #include <stddef.h> int f() { size_t i = 1; i = i << 32; return i; }