Битовые операции сдвига и перестановки - C (СИ)

Узнай цену своей работы

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

Ребят, всем привет, помогите пожалуйста с задачей, ничего не понимаю, первокурсник Написать программу, которая позволит ввести два числа типа insigned int с клавиатуры, напечатать их на дисплее, используя битовые операции поменять местами в них четные биты второго числаина нечётные биты первого, вывести результат. VS 2008 , C Заранее спасибо!

Решение задачи: «Битовые операции сдвига и перестановки»

textual
Листинг программы
static class Program
{
    static string ToBS(this uint x)
    {
        return Convert.ToString(x, 2).PadLeft(sizeof(uint) * 8, '0');
    }
 
    static void Main()
    {
        uint a = Convert.ToUInt32(Console.ReadLine(), 2);
        uint b = Convert.ToUInt32(Console.ReadLine(), 2);
 
        uint mask = 0x55555555;
        uint a1 = a & ~mask | (b & ~mask) >> 1;
        uint b1 = b & mask | (a & mask) << 1;
 
        Console.WriteLine("old a = {0}", a.ToBS());
        Console.WriteLine("old b = {0}", b.ToBS());
        Console.WriteLine("new a = {0}", a1.ToBS());
        Console.WriteLine("new b = {0}", b1.ToBS());
        Console.ReadLine();
    } 
}

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

  1. Объявлена статическая метода ToBS, которая принимает на вход uint и возвращает строку с двоичным представлением числа, дополненным слева нулями до полного байта (8 бит).
  2. В методе Main считываются два числа от пользователя в uint переменные a и b соответственно.
  3. Объявлены две переменные: mask равная 0x55555555 (что в двоичном виде равно 0xFFFFFFFF, т.е. максимальное число, которое можно сдвинуть на 1, не меняя его значения) и a1, b1 которые будут использоваться в дальнейшем.
  4. С помощью битовой операции AND (&) и сдвига (>>) в переменную a1 записывается результат вычисления a & ~mask | (b & ~mask) >> 1. То есть, из двоичного представления числа a удаляются все единицы, которые были во всех четных битах (что соответствует маске), и на их место записываются все единицы из двоичного представления числа b, которые были во всех нечетных битах (что также соответствует маске), сдвинутые на 1.
  5. С помощью битовой операции AND (&) и сдвига (<<) в переменную b1 записывается результат вычисления b & mask | (a & mask) >> 1. То есть, из двоичного представления числа b удаляются все единицы, которые были во всех четных битах (что соответствует маске), и на их место записываются все единицы из двоичного представления числа a, которые были во всех нечетных битах (что также соответствует маске), сдвинутые на 1.
  6. Выводятся на экран двоичные представления чисел a и b (через метод ToBS) с помощью Console.WriteLine.
  7. Выводятся на экран двоичные представления чисел a1 и b1 (через метод ToBS) с помощью Console.WriteLine.
  8. Программа ожидает ввода от пользователя с помощью Console.ReadLine.

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


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

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

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