JavaRush/Блог/Архив info.javarush/Вопрос на засыпку
Rustam
30 уровень

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

Статья из группы Архив info.javarush
участников
Вчера был на собеседовании и надо было одним предложением ответить что делает эта функция. Я пробовал разобраться, но что-то пока не очень густо. Подскажите, что делает эта функция?) (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; }
Комментарии (2)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
ext4
Уровень 20
19 июля 2014, 22:50
1. Условие проверяет, является ли входящий параметр минимальным целым числом (с учётом знака). Если нет, то инкрементирует count.
2. Цикл с проверкой на принадлежность параметра к максимальному положительному целому. И считает, так называемые, числа Мерсенна. В a содержится максимальное число Мерсенна, в count — их количество.
3. Возвращает количество этих чисел.

P.S. В коде опечатка, максимальное положительное целое в шестнадцатеричной системе счисления это 0x7fffffff. И я думаю, что первое условие не имеет смысла. (:
Rustam
Уровень 30
19 июля 2014, 23:31
Большое спасибо, буду теперь разбираться, что да как)