Подсчитать количество "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;
}

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

Вывод кода на экран:

  1. Включаем заголовочный файл stdio.h для работы с функцией вывода на экран, и stdlib.h для работы с функцией system.
  2. Определяем функцию oddBits, которая принимает целое число типа long int, и возвращает целочисленное значение.
  3. Инициализируем переменные: bit - для хранения значения бита, psn_cnt - для подсчета позиций, bit_cnt - для подсчета количества бит.
  4. Создаем маску для работы с битами - 1.
  5. Выполняем цикл по позициям битов от 0 до 31.
  6. Проверяем условие: является ли позиция нечетной и соответствует ли бит значению в этой позиции.
  7. Если условие выполняется, увеличиваем счетчик на 1.
  8. Сдвигаем число вправо на 1 позицию.
  9. Возвращаем значение счетчика.
  10. В функции main определяем переменную b со значением 14.
  11. Вызываем функцию oddBits с аргументом b и выводим результат на экран.
  12. Приостанавливаем выполнение программы до нажатия клавиши.
  13. Завершаем программу с кодом 0.

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


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

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

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