java предельное значение переменной

Обнаружил не понятное мне явление, мы имеем переменную типа byte, инициализируем её как -125 и отнимаем по 1 значению в цикле, и почему-то -128 - 1 = 127. Ну понятно что мы достигли предела переменной, но почему когда мы пытаемся перешагнуть через предел то оказываемся у другого его конца.

public class Main {
    public static void main(String[] args) {
        byte a = -125;

        while(a != 125) {
            a--;
            System.out.println(a);
        }
        System.out.println("END");
    }
}

Прошу прояснить причину этого.


Ответы (2 шт):

Автор решения: Эникейщик

-128 это 1000 0000. Отнимаем 1 получается 0111 1111, т.е. 127.

→ Ссылка
Автор решения: стасевич

если по простому, то воспринимай значение переменных как отрезок от -128 до 127 и когда ты доходишь до края, перескакиваешь в противоположный конец. это как в забагованной игре провалиться в текстуры или пройти через стену. введите сюда описание изображения

в классе math есть методы, которые выбрасывают исключение, если было переполнение переменной введите сюда описание изображения

поэтому надо знать примерную вместимость переменных байт +-127 , инт +-2.147 миллионов и тд

→ Ссылка