Поменять местами разряды младшего байта числа - C (СИ)
Формулировка задачи:
Зеркально поменять местами разряды младшего байта каждого числа.
Решение задачи: «Поменять местами разряды младшего байта числа»
textual
Листинг программы
#include <stdio.h>
unsigned int rev_low(unsigned int n){
unsigned int j = 0, i = n & 0xFFU, p = 7;
for(; i; i >>= 1, --p)
j |= (i & 1) << p;
return (n & ~0xFFU) | j;
}
int main(void){
unsigned int n = 0xABCDF0F1;
printf("%u\n", rev_low(n));
getchar();
return 0;
}
Объяснение кода листинга программы
В данном коде на языке C выполняется следующие действия:
- Подключение заголовочного файла
для работы с функцией отправки сообщений в консоль. - Объявление функции rev_low с типом возвращаемого значения unsigned int и параметром типа unsigned int n.
- Внутри функции объявляются три переменные:
- j - результат работы функции,
- i - младший байт числа n,
- p - счётчик бит, начиная с старшего бита.
- В цикле for происходит последовательное сдвигание бита i вправо и уменьшение значения p до тех пор, пока i не станет равным нулю.
- В каждой итерации цикла значение j дополняется битом i, сдвинутым на значение p (в исходном коде это 7, что означает, что бит i сдвигается на 7 позиций влево).
- По завершению цикла, результат выражения (n & ~0xFFU) приводит к тому, что из числа n удаляется младший байт (0xFFU), а затем к полученному числу добавляется значение переменной j.
- В функции main создаётся переменная n со значением 0xABCDF0F1, которое затем выводится на экран с помощью функции printf.
- Затем программа ожидает нажатия клавиши с помощью функции getchar, чтобы пользователь мог увидеть результат работы программы.
- Функция main возвращает 0, что означает успешный конец работы программы.