Что выведет код Junior Задачи на Kotlin обновлено

Переполнение и Long в Kotlin

Вопрос

Что выведет код? По строке на каждый вывод.

fun main() {
    val a = 2_000_000_000
    val b = 2_000_000_000
    println(a + b)
    println(a.toLong() + b)
    println(Long.MAX_VALUE + 1 == Long.MIN_VALUE)
    println(Math.floorMod(-7, 3))
    println(-7 % 3)
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: -294967296, 4000000000, true, 2, -1. Сумма двух Int переполняется и уходит в отрицательные.

Что выведет

-294967296
4000000000
true
2
-1

Разбор

Сумма двух Int переполняется и уходит в отрицательные. Если один операнд Long, сложение идёт в 64 битах. Long тоже переполняется молча и по кругу. % берёт знак делимого, а floorMod (и mod в Kotlin) возвращает неотрицательный остаток для положительного делителя.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.