Побитовыми операциями поменять местами в числе по 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
. - Результат замены битов выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д