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

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

, ,

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

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

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

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

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

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

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

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

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


3 Коммент. : “Что делает этот код?”

  1. В плюсах – проверка на степень двойки судя по всему.
    Шарпом не интересуюсь, хотя, думаю, там то же самое.

    • Jacob FulcrumWeb says:

      Это просто

      Попробуйте найти решение на “Проверка валидности битовой маски”
      тремя битовыми операциями без использования цикла (грубо – в 3 такта процессора)

  2. Владислав says:

    Прогрессия со знаменателем 2.

    2 – 10 & 01 == 0
    4 – 100 & 011 == 0
    8 – 1000 & 0111 == 0
    и так далее

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

Ваш адрес email не будет опубликован.


*