В каждом байте числа обменять местами старшую и младшую тетрады - Lisp

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

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

Лаборатория Прочитать беззнаковое целое число из стандартного потока ввода и в каждом байте числа обменять местами старшую и младшую тетрады. Результат вывести в стандартный поток вывода. Примеры преобразования: 345 (00000001 01011001) ==> 4245 (00010000 10010101) 333444 (00000101 00010110 10000100) ==> 5267784 (01010000 01100001 01001000)

Решение задачи: «В каждом байте числа обменять местами старшую и младшую тетрады»

textual
Листинг программы
(defun task (n)
 (let ((bn (fix2bit n))
       (b  &H00)
       (m  &HFF)
       (h  &HF0)
       (l  &H0F)
       (r  &H00)
       (bb &H00)
       (hh &H00)
       (ll &H00))  
   (iter (repeat 8)
     (setq b (logAnd bn m))
     (setq hh (logAnd b h) ll (logAnd b l))
     (setq bb (logOr (leftshift ll 4) (rightshift hh 4)))
     (setq r (logOr r bb))
     (setq m (leftShift m 8))
     (setq l (leftShift l 8))
     (setq h (leftShift h 8)))
   (bit2fix r)))
 
==> TASK
 
(task 345)
 
==> 4245
 
(task 333444)
 
==> 5267784

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

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

  1. n — входное значение, число.
  2. bn — результат преобразования числа n в двоичное представление, где самый старший бит — знак, следующий за ним — код числа, состоящий из 7 бит.
  3. b — значение младшей тетрады числа n.
  4. m — значение старшей тетрады числа n.
  5. h — результат применения операции логического И к биту 7 числа n и 0xFF.
  6. l — результат применения операции логического И к биту 7 числа n и 0x0F.
  7. r — результат применения операции логического И к биту 7 числа n и 0x00.
  8. bb — результат применения операции логического И к биту 7 числа n и 0x00.
  9. hh — результат применения операции логического И к биту 7 числа n и 0x00.
  10. ll — результат применения операции логического И к биту 7 числа n и 0x00.
  11. m — значение старшей тетрады числа n после сдвига на 8 позиций вправо.
  12. l — значение младшей тетрады числа n после сдвига на 8 позиций вправо.
  13. h — результат применения операции логического И к биту 7 числа n и 0xFF.
  14. r — результат применения операции логического И к биту 7 числа n и 0x00.
  15. bb — результат применения операции логического И к биту 7 числа n и 0x00.
  16. hh — результат применения операции логического И к биту 7 числа n и 0x00.
  17. ll — результат применения операции логического И к биту 7 числа n и 0x00.
  18. m — значение старшей тетрады числа n после сдвига на 16 позиций вправо.
  19. l — значение младшей тетрады числа n после сдвига на 16 позиций вправо.
  20. h — результат применения операции логического И к биту 7 числа n и 0xFF. Внутри цикла с периодом 8 выполняются следующие действия: — переменная b принимает значение логического И бита 7 числа n и 0x00. — переменная hh принимает значение логического И бита 7 числа n и 0x00. — переменная ll принимает значение логического И бита 7 числа n и 0x00. — переменная r принимает значение логического И бита 7 числа n и 0x00. — переменная bb принимает значение логического И бита 7 числа n и 0x00. — переменная m сдвигается на 8 позиций вправо. — переменная l сдвигается на 8 позиций вправо. — переменная h сдвигается на 8 позиций вправо. После завершения цикла, результат сохраняется в переменной r. Затем выполняется преобразование числа r из двоичной системы в десятичную систему счисления с помощью функции bit2fix. Результат выводится на экран.

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


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

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

9   голосов , оценка 3.778 из 5
Похожие ответы