Почему в 32-битный int в Java нельзя записать значение 4 миллиарда?

«Почему в 32-битный int в Java нельзя записать значение 4 миллиарда?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тип int в Java является 32-битным знаковым целым числом (two's complement). Один бит из 32 используется для знака (0 — положительное, 1 — отрицательное), что оставляет 31 бит для представления величины.

Диапазон значений int: от -2³¹ до 2³¹ - 1, то есть от -2 147 483 648 до 2 147 483 647.

Значение 4 000 000 000 (4 миллиарда) превышает максимальное положительное значение int на 1 852 516 353.

Решение: Для работы с такими числами используйте тип long (64-битное знаковое целое).

Пример:

int maxInt = Integer.MAX_VALUE; // 2_147_483_647
// int fourBillion = 4_000_000_000; // Ошибка компиляции: integer number too large
long fourBillion = 4_000_000_000L; // Корректно, требуется суффикс 'L'
System.out.println(fourBillion); // Вывод: 4000000000

Примечание: В Java 8+ для ограниченных случаев можно использовать статические методы класса Integer для работы с беззнаковыми (unsigned) значениями, например Integer.parseUnsignedInt("4000000000"), но результат всё равно будет храниться в знаковом int.