Почему Integer.MAX_VALUE плюс один равен Integer.MIN_VALUE?

Integer.MAXVALUE — это максимальное значение для 32-битного знакового целого типа данных в Java. Оно равно 2sup31sup - 1.

Короткий ответ

Что ответить на собеседовании

Integer.MAXVALUE — это максимальное значение для 32-битного знакового целого типа данных в Java. Оно равно 2<sup>31</sup> - 1.

Подробный разбор

Ответ с пояснениями

Integer.MAX_VALUE — это максимальное значение для 32-битного знакового целого типа данных в Java. Оно равно 2<sup>31</sup> - 1.

Представление в памяти:

Integer.MAX_VALUE: 0111...1111 (31 единица)

При добавлении единицы происходит переполнение:

Integer.MAX_VALUE + 1:

  0111...1111
+ 0000...0001
------------
  1000...0000

Старший бит становится единицей, что в знаковом представлении указывает на отрицательное число. Для двухкомпонентного дополнения (стандартное представление отрицательных чисел в Java) 1000...0000 соответствует наименьшему отрицательному числу, которое может быть представлено 32 битами, что и есть Integer.MIN_VALUE (-2<sup>31</sup>).

Это поведение является стандартным для знаковых целочисленных типов при переполнении в Java и многих других языках, использующих двухкомпонентное дополнение.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку