Задача на освоение битовых операций - 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; }
Объяснение кода листинга программы
- Объявление функции print_byte_binary, которая преобразует байт в двоичное представление и выводит его на экран.
- Объявление функции print_int_binary, которая преобразует целое число в двоичное представление и выводит его на экран.
- Объявление функции numberOfZeros, которая считает количество нулей в двоичном представлении числа.
- Объявление функции rotateInt, которая поворачивает двоичное представление числа влево на заданное количество позиций.
- В функции main создается переменная x со значением 0xDF5F8FA7.
- Вызывается функция print_int_binary для вывода двоичного представления числа x.
- Вызывается функция rotateInt для поворота двоичного представления числа x влево.
- Вызывается функция print_int_binary для вывода измененного двоичного представления числа x.
- Функция main возвращает 0, завершая работу программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д