Функция, которая подсчитывает количество единиц в двоичной записи числа - 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;
Объяснение кода листинга программы
Код реализует алгоритм подсчёта количества единиц в двоичной записи числа. Вот список действий:
- Инициализировать переменную rez единицей.
- В каждой итерации алгоритма:
- Считать очередную цифру числа (в двоичной системе счисления) в переменную c.
- Вычислить значение c после сдвига на 1 разряд вправо и наложения маски 85 на старший бит.
- Вычислить значение c после сдвига на 2 разряда вправо и наложения маски 51 на старший бит.
- Вычислить значение c после сдвига на 4 разряда вправо и наложения маски 15 на старший бит.
- Прибавить к переменной rez значение c.
- Вернуть значение rez.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д