Побитовыми операциями поменять местами в числе по 2 бита - C (СИ)
Формулировка задачи:
Задали побитовыми операциями поменять местами в числе по 2 бита
то есть в веденном числе последние два бита в начало
за ними предпоследние два бита
пример
1100
0011
1011
1110
1000
0010
С массивами могу сделать а как сделать с побитовыми операциями даже не представляю=(
Решение задачи: «Побитовыми операциями поменять местами в числе по 2 бита»
textual
Листинг программы
//В целом числе 8 <= n <= 1,073,741,823 поменять местами первые два бита с последними 2 битами,
//вторые 2 бита - с предпоследними, и т.д.
#include <stdio.h>
#include <stdlib.h>
int bits(int num)
{ int res = 1;
while(num != 1)
{ num /= 2;
res++;
}
return res;
}
//the whole routine
void replaceBits(int n)
{ char buf[33];
int a,b, k, res = 0, i;
k = bits(n);
for(i = k/2 + k%2; i>0; i--)
{ b = (n>>2)<<2 ^ n;
n = n>>2;
if(b)
res = res | (b<<(2*i-2));
}
itoa(res, buf, 2);
printf("\nResult with pairs of bits replaced:\t%s", buf);
}
int main()
{ int n;
char buf[33];
printf("Enter integer (8 <= n <= 1,073,741,823): n = ");
scanf("%d", &n);
fflush(stdin);
itoa(n, buf, 2);
printf("Its binary representation:\t\t%s", buf);
replaceBits(n);
getchar();
return 0;
}
Объяснение кода листинга программы
- Объявлены две функции:
bitsиreplaceBits. - Функция
bitsпринимает целое числоnumи возвращает количество битов в числе. - В функции
replaceBitsобъявлены следующие переменные:char buf[33];для хранения результата в двоичной системе счисления.int a, b, k, res = 0;для выполнения побитовых операций.for(i = k/2 + k%2; i>0; i--)для выполнения замены битов в числеn.b = (n>>2)<<2 ^ n;для выполнения побитовых операций.n = n>>2;для усечения числаnвдвое.if(b)для проверки значения переменнойbи добавления его в результатres.
- В функции
mainобъявлены следующие переменные:int n;для хранения входного числа.char buf[33];для хранения двоичного представления числа.
- Пользователю предлагается ввести целое число, не превышающее 1,073,741,823.
- Введенное число преобразуется в двоичную систему счисления и выводится на экран.
- Вызывается функция
replaceBits, передавая ей введенное числоn. - Результат замены битов выводится на экран.