1ul << n will still be a 32 bit integer regardless of the value of n, given the target here is 64 bits the upper 32 bits will always be zero. Using 1ull will yield the expected result.
1ul << n will still be a 32 bit integer regardless of the value of n, given the target here is 64 bits the upper 32 bits will always be zero. Using 1ull will yield the expected result.