При целочисленном переполнении Go сохраняются младшие биты результата, и старший знаковый бит может стать 1. Поэтому положительное вычисление может дать отрицательный int32.
Почему результат получился отрицательным при переполнении int32?
При целочисленном переполнении Go сохраняются младшие биты результата, и старший знаковый бит может стать 1. Поэтому положительное вычисление может дать отрицательный int32.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
При целочисленном переполнении Go сохраняются младшие биты результата, и старший знаковый бит может стать 1. Поэтому положительное вычисление может дать отрицательный int32.
Диапазон int32 — от −2³¹ до 2³¹−1. При runtime-арифметике выход за верхнюю границу не насыщается максимумом автоматически; проверку нужно делать до операции либо использовать более широкий тип. Это не то же самое, что преобразование слишком большого float64 в int32, где результат вне диапазона зависит от реализации. Непредставимая константа может быть отвергнута компилятором.