Циклический битовый сдвиг - 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();
}