Подсчитать количество "1" на нечетных позициях и вернуть количество таких единиц - C (СИ)
Формулировка задачи:
День добрый!
Возникла проблема с написанием программы с помощью побитовых сдвигов (bitwise operators) в Си.
Программа должна считать количество "1" на нечетных позициях и вернуть количество таких единиц.
Пример: 10010101 -> 1 бит
00101011 -> 3 бита
сам код, но без побитовых операции:
Если у кого-то есть возможность переписать данную программу с нужными условиями буду очень благодарен!
#include <stdio.h>
int oddBits(long bits)
{
int bit = 0;
int psn_cnt = 0; //position counter to identify odd/even
int bit_cnt = 0; // odd bit counter
while(bits != 0)
{
bit = bits % 10;
if((bit == 1) && (psn_cnt % 2 != 0))
{
bit_cnt++;
}
psn_cnt++;
bits /= 10;
}
return bit_cnt;
}
int main()
{
int bit_cnt;
unsigned long bits = 0;
printf("Enter the sequence of bits: ");
scanf("%d", &bits);
bit_cnt = oddBits(bits);
printf("%d bits", bit_cnt);
return 0;
}Решение задачи: «Подсчитать количество "1" на нечетных позициях и вернуть количество таких единиц»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int oddBits(long int bits)
{
int bit = 0;
int psn_cnt = 0; //position counter to identify odd/even
int bit_cnt = 0; // odd bit counter
long mask=1;
int i;
for (i=0; i<=31; i++)
{
if (((i % 2)==1) && (bits & mask)) bit_cnt++;
bits>>=1;
}
return bit_cnt;
}
int main(int argc, char *argv[])
{
long int b=14;
printf("%d\n",oddBits(b));
system("PAUSE");
return 0;
}
Объяснение кода листинга программы
Вывод кода на экран:
- Включаем заголовочный файл stdio.h для работы с функцией вывода на экран, и stdlib.h для работы с функцией system.
- Определяем функцию oddBits, которая принимает целое число типа long int, и возвращает целочисленное значение.
- Инициализируем переменные: bit - для хранения значения бита, psn_cnt - для подсчета позиций, bit_cnt - для подсчета количества бит.
- Создаем маску для работы с битами - 1.
- Выполняем цикл по позициям битов от 0 до 31.
- Проверяем условие: является ли позиция нечетной и соответствует ли бит значению в этой позиции.
- Если условие выполняется, увеличиваем счетчик на 1.
- Сдвигаем число вправо на 1 позицию.
- Возвращаем значение счетчика.
- В функции main определяем переменную b со значением 14.
- Вызываем функцию oddBits с аргументом b и выводим результат на экран.
- Приостанавливаем выполнение программы до нажатия клавиши.
- Завершаем программу с кодом 0.