Задача на освоение битовых операций - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задача: подается число типа int, необходимо вывести его двоичное представление на экран и осуществить арифметический сдвиг вправо каждого байта этого числа на количество содержащихся в нем(байте) нулевых битов, вывести преобразованное число на экран. Помогите, плиз, сам пытался разобраться, но не врубаюсь вообще.

Решение задачи: «Задача на освоение битовых операций»

textual
Листинг программы
#include <stdio.h>
 
void print_byte_binary(char b)
{
    char buf[9];
    int i=7;
    for (i=7; i>=0; i--)
    {
        buf[i] = '0' + (b & 1);
        b >>= 1;
    }
    buf[8] = '\0';
 
    printf("%s", buf);
}
 
void print_int_binary(int x)
{
    size_t i;
    char *data = &x;
    for (i = sizeof(int); i > 0; i--)
    {
        print_byte_binary(data[i-1]);
        printf(" ");
    }
    puts("");
}
 
size_t numberOfZeros(char x)
{
    size_t n = 0;
    int i = 8;
    while (i --> 0)
    {
        if ( !(x & 1) ) ++n;
        x >>= 1;
    }
 
    return n;
}
 
void rotateInt(int *x)
{
    char *p = x;
    size_t i = sizeof(int);
    while (i --> 0)
    {
        *(p+i) >>= numberOfZeros(*(p+i));
    }
}
 
int main()
{
    int x = 0xDF5F8FA7;
 
    print_int_binary(x);
    rotateInt(&x);
    print_int_binary(x);
 
    return 0;
}

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

  1. Объявление функции print_byte_binary, которая преобразует байт в двоичное представление и выводит его на экран.
  2. Объявление функции print_int_binary, которая преобразует целое число в двоичное представление и выводит его на экран.
  3. Объявление функции numberOfZeros, которая считает количество нулей в двоичном представлении числа.
  4. Объявление функции rotateInt, которая поворачивает двоичное представление числа влево на заданное количество позиций.
  5. В функции main создается переменная x со значением 0xDF5F8FA7.
  6. Вызывается функция print_int_binary для вывода двоичного представления числа x.
  7. Вызывается функция rotateInt для поворота двоичного представления числа x влево.
  8. Вызывается функция print_int_binary для вывода измененного двоичного представления числа x.
  9. Функция main возвращает 0, завершая работу программы.

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


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

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

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