Почему результат получился отрицательным при переполнении int32?

При целочисленном переполнении Go сохраняются младшие биты результата, и старший знаковый бит может стать 1. Поэтому положительное вычисление может дать отрицательный int32.

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

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

При целочисленном переполнении Go сохраняются младшие биты результата, и старший знаковый бит может стать 1. Поэтому положительное вычисление может дать отрицательный int32.

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

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

При целочисленном переполнении Go сохраняются младшие биты результата, и старший знаковый бит может стать 1. Поэтому положительное вычисление может дать отрицательный int32.

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

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее