Хорошая идея понять пределы диапазона для разных типов.
32-битный тип (на большинстве 32-разрядных платформ, как int, так и long 32 бит) имеют следующие диапазоны:
signed: -2,147,483,648 to 2,147,483,647
unsigned: 0 to 4,294,967,295
В то время как 64-битные типы (обычно длинные - 64 бит, на большинстве 64-разрядных платформ Unix - 64) имеют следующий диапазон:
signed: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
unsigned: 0 to 18,446,744,073,709,551,615