воскресенье, 2 сентября 2007 г.

Java Puzzle 33: Looper Meets the Wolfman

Сделайте следующий цикл бесконечным, не используя возможности Java 5:
while (i != 0 && i == -i)

Забавно, но все кроется в компьютерной арифметике. Как получаются отрицательные числа? Изменяем значение каждого бита и прибавляем 1. Это сделано для удобства работы с 0: -0 => 0xFFFFFFFF + 1 => 0. Остальные числа либо отрицательные, либо положительные, но! Отрицательных чисел больше, так как количество комбинаций бит четное, а одна из них занята 0. Мы имеем уникальное отрицательное число, пары которому нет: -0x80000000 => 0x7FFFFFFF + 1 => 0x80000000. Т.е. i == -i, но в то же время не равно 0. Вот и ответ:
int i = Integer.MIN_VALUE;

Комментариев нет:

Отправить комментарий