Инвертировать значения двух старших битов каждой тетрады, если младший бит тетрады единичный - Lisp

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

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

Не могли бы помочь написать программу (common lisp) Прочитать беззнаковое целое число из стандартного потока ввода и в каждом байте числа инвертировать значения двух старших битов каждой тетрады, если младший бит тетрады единичный. Результат вывести в стандартный поток вывода. Примеры преобразования: 65535 (11111111 11111111) ==> 13107 (00110011 00110011) 333444 (00000101 00010110 10000100) ==> 644740 (00001001 11010110 10000100)

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

textual
Листинг программы
  1. (defun change-byte (b)
  2.  (let ((h (logand b #16RF0))
  3.        (l (logand b #16R0F)))
  4.      (unless (zerop (logand h #16R10)) (setf h (logxor h #16RC0)))  
  5.      (unless (zerop (logand l #16R1))  (setf l (logxor h #16R0C)))  
  6.     (logior h l)))
  7.  
  8. (defun task (z)
  9.    (dotimes (i (ceiling (integer-length z) 8) z)
  10.      (setf z
  11.           (dpb (change-byte (ldb (byte 8 (* i 8)) z))
  12.                (byte 8 (* i 8)) z))))

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


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

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

7   голосов , оценка 3.714 из 5

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

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

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