Циклический битовый сдвиг - C#

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

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

Здравствуйте, уважаемые товарищи кодеры. Проблема у меня такая: Написать программу, которая позволит ввести два числа n и k типа ulong с клавиатуры, напечатать их на дисплее, используя битовые операции сделать в числе n циклическую перестановку бит, кратных 2 на k*2 бит вправо, вывести результат. Всё бы хорошо, но я не до конца понимаю реализацию сего вопроса(извечная проблема с битовыми операциями). Точнее, сколько не старался, всё время, как мне кажется, что-то упускал. В общем, уверен только в следующем, самом элементарном:
ulong n, n1, x1;
            int k;
            Console.WriteLine("Введите значение n, затем  k: ");
            n = ulong.Parse(Console.ReadLine());
            k = int.Parse(Console.ReadLine());
            Console.WriteLine("n = {0}, k= {1}", n, k);
            n1 = n & 0x5555555555555555; //выделяем каждый второй бит
А вот дальше, увы, я глуп... буду весьма благодарен, за подробное объяснение.

Решение задачи: «Циклический битовый сдвиг»

textual
Листинг программы
static void Main(string[] args)
        {
            
            Console.WriteLine("Введите значение n, затем  k: ");
            ulong n = ulong.Parse(Console.ReadLine());
            int k = int.Parse(Console.ReadLine());
          
            ulong n1 = n & 0x5555555555555555;
            n = n & 0x2aaaaaaaaaaaaaaa;
 
            for (int i = 0; i < k; i++)
            {
 
                if ((n1% 2) != 0)
                {
                    n1 = n1 / 4;
                    n1 = n1 | 0x4000000000000000;
                }
                else
                {
                    n1 = n1 / 4;
                }
            }
 
            n = n | n1;
 
            Console.WriteLine(n);
 
            Console.ReadLine();
 
        }

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


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

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

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