User Rustam
Rustam
30 уровень
Харьков

Вопрос на засыпку

Статья из группы Архив info.javarush.ru
Вчера был на собеседовании и надо было одним предложением ответить что делает эта функция. Я пробовал разобраться, но что-то пока не очень густо. Подскажите, что делает эта функция?) (100%-ю правильность кода гарантировать не могу, потому что писал по памяти) public static int func(int a) { int count = 0; if((a & 0x80000000) == 0) count++; while ((a & 0x7ffffff) != 0x7ffffff){ a = a | (a + 1); count++; } return count; }
Комментарии (3)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
ext4 Уровень 20
19 июля 2014
1. Условие проверяет, является ли входящий параметр минимальным целым числом (с учётом знака). Если нет, то инкрементирует count.
2. Цикл с проверкой на принадлежность параметра к максимальному положительному целому. И считает, так называемые, числа Мерсенна. В a содержится максимальное число Мерсенна, в count — их количество.
3. Возвращает количество этих чисел.

P.S. В коде опечатка, максимальное положительное целое в шестнадцатеричной системе счисления это 0x7fffffff. И я думаю, что первое условие не имеет смысла. (: