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