Почему при процессоре с разрядностью 64 бита, integer занимает 2^32 значений?
Авторам стандарта так захотелось, только и всего. Используйте int64_t. В нем гарантированно 64 бита, даже на 32 битной машине.
А еще зависит от того, под какую архитектуру вы скомпилили.