Циклический битовый сдвиг - 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(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д