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

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

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

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

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

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

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

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

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

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


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

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

9   голосов , оценка 4.111 из 5
Похожие ответы