Причиной переполнения и подсчета двух совместимых кодов идет «второй цикл», мы оказались в крайнем крайнем правом положении 2147483647, и после суммирования 1 мы оказались в крайнем крайнем левом положении -2147483648, следующий инкремент идет -2147483647, -2147483646, -2147483645, ... и так далее, в крайнем правом положении, снова и снова, его природа сумматора на этой глубине в битах.
Некоторые примеры:
int a = 2147483647;
System.out.println(a);
дает: 2147483647
System.out.println(a+1);
дает: -2147483648 (причиной переполнения и подсчета двух совместимых кодов идет «второй цикл», мы оказались в крайнем крайнем правом положении 2147483647 и после суммирования 1 мы оказались в крайнем крайнем левом положении -2147483648, следующий инкремент идет - 2147483648, -2147483647, -2147483646, ... и т. Д. Снова и снова в крайнем крайнем правом положении, его природа суммирующей машины на этой глубине бита)
System.out.println(2-a);
дает: -2147483645 (-2147483647 + 2 кажется математически логичным)
System.out.println(-2-a);
дает: 2147483647 (-2147483647-1 -> -2147483648, -2147483648-1 -> 2147483647 некоторый цикл, описанный в предыдущих ответах)
System.out.println(2*a);
дает: -2 (2147483647 + 2147483647 -> -2147483648 + 2147483646 снова математически-логический)
System.out.println(4*a);
дает: -4 (2147483647 + 2147483647 + 2147483647 + 2147483647 -> -2147483648 + 2147483646 + 2147483647 + 2147483647 -> -2-2 (согласно последнему ответу) -> -4) `