Изменить порядок следования нечетных битов в числе на обратный - C (СИ)

Формулировка задачи:

Написать программу, которая получает случайное целое типа int, выводит его двоичное представление на экран, выполняет преобразование в соответствии с вариантом (см. ниже) затем выводит на экран двоичное представление результата преобразования. Изменить порядок следования нечетных битов в числе на обратный. Пример: 11110000 -> 01011010 * Замечание 1. В результате преобразования должно измениться исходное число, недостаточно просто вывести результат преобразования на экран. Замечание 2. Если операция предусматривает использование одного или нескольких случайных параметров (например, сдвиг на случайное число битов), их значения следует выводить на экран. Замечание 3. Преобразование должно осуществляться с помощью битовых операци (сдвиги, логические операции). Использование стандартных массивов или контейнеров STL для представления битов и байтов числа запрещено.

Код к задаче: «Изменить порядок следования нечетных битов в числе на обратный - C (СИ)»

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

14   голосов, оценка 4.286 из 5


СОХРАНИТЬ ССЫЛКУ