Для целого числа заменить все его биты с k1 по k2 на те же элементы в обратном порядке - PascalABC.NET

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

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

Для данного целого числа заменить все его биты с k1 по k2 на те же элементы в обратном порядке. т.е дано какое то двоичное число и указав номер двух битов нужно поменять местами биты входящие в этот интервал. для десятичного числа это сделать могу, но как сделать для двоичного не совсем понимаю вот код для десятичного числа
Листинг программы
  1. var
  2. m, n: LongInt;
  3. k, i, p: Integer;
  4. begin
  5. WriteLn('Введите целое число');
  6. ReadLn(m);
  7. while m > 0 do
  8. begin
  9. i := m mod 10;
  10. p := p * 10 + i;
  11. m := m div 10;
  12. end;
  13. write(p);
  14. end.

Решение задачи: «Для целого числа заменить все его биты с k1 по k2 на те же элементы в обратном порядке»

textual
Листинг программы
  1. var
  2.   n, k1, k2, b1, b2: LongInt;
  3.  
  4. begin
  5.   readln(n, k1, k2); { n - исходное число, k1 - начало интервала(включительно),
  6.       k2 - конец интервала(включительно). Индексы начинаются с нуля. }
  7.  
  8.   while(k1 < k2) do begin
  9.     b1 := (1 shl k1) and n; //бит на позиции k1
  10.     b2 := (1 shl k2) and n; //бит на позиции k2
  11.    
  12.     if(b1 = 0)
  13.       then n := n and (not(1 shl k2))
  14.       else n := n or (1 shl k2);
  15.     if(b2 = 0)
  16.       then n := n and (not(1 shl k1))
  17.       else n := n or (1 shl k1);
  18.    
  19.     k1 := k1 + 1;
  20.     k2 := k2 - 1;
  21.   end;
  22.  
  23.   writeln(n);
  24. end.

Объяснение кода листинга программы

В этом коде выполняется замена всех битов числа в заданном интервале на те же биты в обратном порядке.

  1. Сначала программа запрашивает у пользователя целое число и два целых числа, которые задают интервал.
  2. Затем, пока k1 меньше k2, программа берет биты числа на позициях k1 и k2, используя сдвиг и побитовую операцию AND.
  3. Если бит на позиции k1 равен 0, то программа заменяет этот бит на 1, иначе на 0.
  4. Если бит на позиции k2 равен 0, то программа заменяет этот бит на 1, иначе на 0.
  5. Затем программа увеличивает k1 на 1 и уменьшает k2 на 1.
  6. После завершения цикла программа выводит полученное число.

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


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

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

13   голосов , оценка 4.231 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы