В каждом байте числа обменять местами старшую и младшую тетрады - 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. Результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д