В каждом байте числа обменять местами старшую и младшую тетрады - 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
Объяснение кода листинга программы
В данном коде выполняется задача обмена местами старшей и младшей тетрады в каждом байте числа. Список переменных и их значений:
- n — входное значение, число.
- bn — результат преобразования числа n в двоичное представление, где самый старший бит — знак, следующий за ним — код числа, состоящий из 7 бит.
- b — значение младшей тетрады числа n.
- m — значение старшей тетрады числа n.
- h — результат применения операции логического И к биту 7 числа n и 0xFF.
- l — результат применения операции логического И к биту 7 числа n и 0x0F.
- r — результат применения операции логического И к биту 7 числа n и 0x00.
- bb — результат применения операции логического И к биту 7 числа n и 0x00.
- hh — результат применения операции логического И к биту 7 числа n и 0x00.
- ll — результат применения операции логического И к биту 7 числа n и 0x00.
- m — значение старшей тетрады числа n после сдвига на 8 позиций вправо.
- l — значение младшей тетрады числа n после сдвига на 8 позиций вправо.
- h — результат применения операции логического И к биту 7 числа n и 0xFF.
- r — результат применения операции логического И к биту 7 числа n и 0x00.
- bb — результат применения операции логического И к биту 7 числа n и 0x00.
- hh — результат применения операции логического И к биту 7 числа n и 0x00.
- ll — результат применения операции логического И к биту 7 числа n и 0x00.
- m — значение старшей тетрады числа n после сдвига на 16 позиций вправо.
- l — значение младшей тетрады числа n после сдвига на 16 позиций вправо.
- 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. Результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д