Для целого числа заменить все его биты с k1 по k2 на те же элементы в обратном порядке - PascalABC.NET
Формулировка задачи:
Для данного целого числа заменить все его биты с k1 по k2 на те же элементы в
обратном порядке. т.е дано какое то двоичное число и указав номер двух битов нужно поменять местами биты входящие в этот интервал. для десятичного числа это сделать могу, но как сделать для двоичного не совсем понимаю
вот код для десятичного числа
Листинг программы
- var
- m, n: LongInt;
- k, i, p: Integer;
- begin
- WriteLn('Введите целое число');
- ReadLn(m);
- while m > 0 do
- begin
- i := m mod 10;
- p := p * 10 + i;
- m := m div 10;
- end;
- write(p);
- end.
Решение задачи: «Для целого числа заменить все его биты с k1 по k2 на те же элементы в обратном порядке»
textual
Листинг программы
- var
- n, k1, k2, b1, b2: LongInt;
- begin
- readln(n, k1, k2); { n - исходное число, k1 - начало интервала(включительно),
- k2 - конец интервала(включительно). Индексы начинаются с нуля. }
- while(k1 < k2) do begin
- b1 := (1 shl k1) and n; //бит на позиции k1
- b2 := (1 shl k2) and n; //бит на позиции k2
- if(b1 = 0)
- then n := n and (not(1 shl k2))
- else n := n or (1 shl k2);
- if(b2 = 0)
- then n := n and (not(1 shl k1))
- else n := n or (1 shl k1);
- k1 := k1 + 1;
- k2 := k2 - 1;
- end;
- writeln(n);
- end.
Объяснение кода листинга программы
В этом коде выполняется замена всех битов числа в заданном интервале на те же биты в обратном порядке.
- Сначала программа запрашивает у пользователя целое число и два целых числа, которые задают интервал.
- Затем, пока k1 меньше k2, программа берет биты числа на позициях k1 и k2, используя сдвиг и побитовую операцию AND.
- Если бит на позиции k1 равен 0, то программа заменяет этот бит на 1, иначе на 0.
- Если бит на позиции k2 равен 0, то программа заменяет этот бит на 1, иначе на 0.
- Затем программа увеличивает k1 на 1 и уменьшает k2 на 1.
- После завершения цикла программа выводит полученное число.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д