Что делает этот код?

Опубликовано Sep 30, 2011 в Манипуляция битами | 3 коммент.

, ,

Объясните, что проверяет следующий код на С++ и C#.

bool b = (n & (n-1)) == 0;

1 Цель задания быстрая проверка базовых навыков работы с разными системами счисления и битовым представлением данных
2 Время выполнения 5 минут
3 Формат выполнения словесное объяснение с использованием бумаги без доступа к документации

Критерии оценки FulcrumWeb:

Кандидат должен продемонстрировать, что понимает смысл оператора &,  знает, что для работы с ним нужно представить число в двоичном виде и умеет это сделать.  После этого необходимо перейти к конкретным примерам и вывести ответ на их основе. Если до однозначного ответа дело не дойдет, но будут продемонстрированы правильные результаты выполнения оператора &, то может быть дана подсказка какие именно примеры нужно рассмотреть для выявления закономерности.

Ожидаемые вопросы:

  1.  Можно ли считать, что n – целое число без знака или ноль?
  2.  Учитывать ли различие в формулировке ответа, если n имеет тип char?

Оценка результатов:

Как минимум должно быть продемонстрировано вычисление правильных ответов исходного выражения. Замечательно, если закономерность будет найдена и сформулирована.