Сайт работает в тестовом режиме - все замечания, предложения и информацию о найденных ошибках направляйте, пожалуйста, в Telegram-группу
Курс в процессе наполнения. Полный курс доступен на Степике

Баг: Игнорирование переполнения при сужении (wrap‑around)

Что делают:
var big int16 = 300; var small int8 = int8(big) и ожидают увидеть 300 или ошибку, а видят 44.

Почему ошибка:
При сужении из большего типа в меньший (например, int16int8) лишние старшие биты отбрасываются. Для знаковых чисел это приводит к wrap‑around: 300 - 256 = 44. Go не предупреждает, он просто обрезает биты.

Как правильно:
Прежде чем приводить, проверяй, влезает ли число в целевой тип:

if big >= -128 && big <= 127 {
    small := int8(big)
} else {
    // обработать ошибку
}

Загрузка...