В длинном целом числе N поменять тетрады (четыре соседних двоичных разряда) в зеркальном порядке - C (СИ)
Формулировка задачи:
Помогите,пожалуйста,написать программу.В длинном целом числе N поменять тетрады (четыре соседних двоичных разряда) в
зеркальном порядке.
Решение задачи: «В длинном целом числе N поменять тетрады (четыре соседних двоичных разряда) в зеркальном порядке»
textual
Листинг программы
long N, res=0; int s = sizeof(long); for(i=0; i<s; i+=4) res |= (((N>>(s-i-4))&15) << i);
Объяснение кода листинга программы
В данном коде:
- Объявляются три переменные: N, res, s.
- Переменная N содержит длинное целое число.
- Переменная res будет содержать результат.
- Переменная s содержит размер в байтах (8 или 4) переменной N.
- В цикле for перебираются все тетрады (группы по 4 двоичных разряда) числа N, начиная с самого старшего (наиболее значимого) разряда.
- Для каждой тетрады выполняется операция побитового И (res |=) с использованием сдвига (<<) и побитового И (&) с 15 (максимальное значение для 4-х разрядов).
- Результат каждой тетрады (в виде числа от 0 до 15) сдвигается влево на количество байтов, равное номеру текущей тетрады (от 0 до 3), и записывается в переменную res с использованием побитового И (res |=).
- В конце цикла значение переменной res будет содержать число, полученное из исходного числа N, в котором тетрады поменялись местами.