Функция, которая подсчитывает количество единиц в двоичной записи числа - C (СИ)

Узнай цену своей работы

Формулировка задачи:

В книге Кернигана и Ритчи представлена данная функция, которая подсчитывает количество единиц в двоичной записи числа:
Листинг программы
  1. #include <stdio.h>
  2. /* bitcount: подсчитывает единицы в двоичной записи x */
  3. int bitcount(unsigned x)
  4. {
  5. int b;
  6. for (b = 0; x != 0; x >>= 1)
  7. if (x & 01)
  8. b++;
  9. return b;
  10. }
  11. int main()
  12. {
  13. unsigned x;
  14. scanf("%u", &x);
  15. printf("%d\n", bitcount(x));
  16. return 0;
  17. }
Я не понимаю, зачем записывать единицу в восьмеричной системе счисления:
Листинг программы
  1. if (x & 01)
Что изменится, если я запишу единицу, например, в десятичной системе:
Листинг программы
  1. if (x & 1)

Решение задачи: «Функция, которая подсчитывает количество единиц в двоичной записи числа»

textual
Листинг программы
  1. unsigned int rez = 0;
  2.         unsigned char c;
  3. ....................................
  4.         c = (c & 85) + ((c>>1) & 85);
  5.         c = (c & 51) + ((c>>2) & 51);
  6.         c = (c & 15) + (c>>4);
  7.         rez = c;

Объяснение кода листинга программы

Код реализует алгоритм подсчёта количества единиц в двоичной записи числа. Вот список действий:

  1. Инициализировать переменную rez единицей.
  2. В каждой итерации алгоритма:
    • Считать очередную цифру числа (в двоичной системе счисления) в переменную c.
    • Вычислить значение c после сдвига на 1 разряд вправо и наложения маски 85 на старший бит.
    • Вычислить значение c после сдвига на 2 разряда вправо и наложения маски 51 на старший бит.
    • Вычислить значение c после сдвига на 4 разряда вправо и наложения маски 15 на старший бит.
    • Прибавить к переменной rez значение c.
  3. Вернуть значение rez.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы