Изменить порядок следования нечетных битов в числе на обратный - C (СИ)
Формулировка задачи:
Написать программу, которая получает случайное целое типа int, выводит его двоичное
представление на экран, выполняет преобразование в соответствии с вариантом (см. ниже)
затем выводит на экран двоичное представление результата преобразования.
Изменить порядок следования нечетных битов в числе на обратный.
Пример:
11110000 -> 01011010 * Замечание 1. В результате преобразования должно измениться исходное число, недостаточно просто вывести результат преобразования на экран. Замечание 2. Если операция предусматривает использование одного или нескольких случайных параметров (например, сдвиг на случайное число битов), их значения следует выводить на экран. Замечание 3. Преобразование должно осуществляться с помощью битовых операци (сдвиги, логические операции). Использование стандартных массивов или контейнеров STL для представления битов и байтов числа запрещено.Решение задачи: «Изменить порядок следования нечетных битов в числе на обратный»
textual
Листинг программы
int h = 12345;
int h0 = h; // сохраняем начальное значение, поскольку переменная h будет испорчена
int mask = 0;
for (int i = 0; i < sizeof(h)/2; i++)
{
mask = (mask << 2) | (h & 1);
h >>= 2;
}
// mask будет содержать нечётные биты h в обратном порядке, остальные биты = 0
Объяснение кода листинга программы
- Объявляется целочисленная переменная
hсо значением 12345. - Объявляется целочисленная переменная
h0и присваивается ей значение переменнойh, чтобы сохранить начальное значениеh. - Объявляется целочисленная переменная
maskи инициализируется значением 0. - Запускается цикл
forдля перебора половины байтов переменнойh. - В каждой итерации цикла в переменную
maskвключаются нечетные биты текущего байта числаhв обратном порядке, а само числоhсдвигается вправо на два бита. - По завершении цикла в переменной
maskбудут содержаться нечетные биты числаhв обратном порядке, остальные биты будут равны 0.