Подсчитать количество "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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д