В однобайтовую переменную занести попорядку значения старшего и младшего битов - C (СИ)
Формулировка задачи:
дано длинное целое неотрицательное число. В однобайтовую переменную занести попорядку значения старшего и младшего битов для каждого байта исходного числа. помогите с решением на си
Решение задачи: «В однобайтовую переменную занести попорядку значения старшего и младшего битов»
textual
Листинг программы
#include <stdio.h> #include <limits.h> void foo( unsigned num, unsigned char *rez ) { unsigned i = CHAR_BIT; unsigned shr = sizeof( unsigned ) * CHAR_BIT - 1; while ( i-- ) { *rez |= ( ( ( num >> shr ) & 1 ) << i ); num <<= ( i % 2 ? CHAR_BIT - 1 : 1 ); } } int main () { unsigned x = 0x00018081; /* x = 0000 0000 0000 0001 1000 0000 1000 0001 */ unsigned char y = 0; foo( x, &y ); printf( "%x\n", y ); return 0; }
Объяснение кода листинга программы
В этом коде задача состоит в том, чтобы разбить однобайтовый двоичный номер на два байта и вывести их. Список действий:
- Включаем необходимые заголовочные файлы
- Определяем функцию, которая будет выполнять необходимые действия
- В функции объявляем переменные:
- num - двоичное число, которое необходимо разбить
- rez - указатель на однобайтовый буфер, в который будут заноситься полученные значения
- i - счётчик бит
- shr - смещение для сдвига числа
- В цикле сдвигаем число влево, тем самым перенося старший бит на младшее место
- Получаем старший бит с помощью операции
>>
и сдвигаем его на текущую позицию младшего бита с помощью операции<<
- Заносим полученное значение в буфер
- Выводим полученный результат
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д