В однобайтовую переменную занести попорядку значения старшего и младшего битов - 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 - смещение для сдвига числа
- В цикле сдвигаем число влево, тем самым перенося старший бит на младшее место
- Получаем старший бит с помощью операции
>>и сдвигаем его на текущую позицию младшего бита с помощью операции<< - Заносим полученное значение в буфер
- Выводим полученный результат