Побитовыми операциями поменять местами в числе по 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;
}

Объяснение кода листинга программы

  1. Объявлены две функции: bits и replaceBits.
  2. Функция bits принимает целое число num и возвращает количество битов в числе.
  3. В функции 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.
  4. В функции main объявлены следующие переменные:
    • int n; для хранения входного числа.
    • char buf[33]; для хранения двоичного представления числа.
  5. Пользователю предлагается ввести целое число, не превышающее 1,073,741,823.
  6. Введенное число преобразуется в двоичную систему счисления и выводится на экран.
  7. Вызывается функция replaceBits, передавая ей введенное число n.
  8. Результат замены битов выводится на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы