Этот вопрос не о том, как длинный должен быть правильно добавлен в int, а скорее, что происходит, когда мы неправильно приводим его в int.
Итак, рассмотрим этот код -
   @Test
    public void longTest()
    {
        long longNumber = Long.MAX_VALUE;
        int intNumber = (int)longNumber; // potentially unsafe cast.
        System.out.println("longNumber = "+longNumber);
        System.out.println("intNumber = "+intNumber);
    }
Это дает результат -
longNumber = 9223372036854775807
intNumber = -1
Теперь предположим, что сделаю следующее изменение -
long longNumber = Long.MAX_VALUE - 50;
Затем я получаю вывод -
longNumber = 9223372036854775757
intNumber = -51
Вопрос в том, , как - это длинное значение, которое преобразуется в int?