Подсчет количества битов, выставленных в единицу - C (СИ)
Формулировка задачи:
Написать программу подсчитывающая количество битов, выставленных в единицу у числа типа long и double. Сами значения чисел вводятся с клавиатуры.
Решение задачи: «Подсчет количества битов, выставленных в единицу»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int num_bits(int n)
{
if (n==0) return 0;
return (n%2)+num_bits(n/2);
}
int main(int argc, char *argv[])
{
int n;
printf("n=");
scanf("%d",&n);
printf("number of bits=%d\n",num_bits(n));
system("PAUSE");
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с I/O и выполнения операций с основаниями систем
- Определяем функцию с именем num_bits, которая принимает целочисленный аргумент n и возвращает количество битов, выставленных в единицу
- Проверяем базовый случай - если n равно нулю, то функция возвращает 0, так как в двоичном числе нет битов, выставленных в единицу
- В противном случае функция возвращает сумму двух значений: n % 2 (остаток от деления n на 2, то есть последний биту n) и результат рекурсивного вызова функции num_bits, в котором аргументом является n/2 (это биты, расположенные в двоичном числе n до последнего бита)
- В функции main считываем целочисленный аргумент n с помощью функции scanf
- Вызываем функцию num_bits, передавая ей в качестве аргумента n
- Выводим результат работы функции num_bits на экран с помощью функции printf
- Ожидаем нажатия любой клавиши с помощью функции system(
PAUSE) - Возвращаем 0, чтобы указать, что программа успешно завершилась