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.