Под mingw64 нет смысла давать больше 2^32, т.к. размер unsigned long int только 4 байта. На оригинальном 64-битном линуксе вроде 8 должно быть. Если мне надо 64 бита, я обычно явно указываю uint64_t. И кроме того, если делать на 64 бита, тогда ваши битовые операции надо переписывать. Они вроде только на 32 битные куски рассчитаны.