В каждом байте числа обнулить 0-ой и 7-ой биты и сделать единичными 3-ий и 4-ый биты - Lisp

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

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

Надо: Прочитать беззнаковое целое число из стандартного потока ввода и в каждом байте числа обнулить нулевой и седьмой биты и сделать единичными третий и четвертый биты. Результат вывести в стандартный поток вывода. Уже сделано: "обнулить нулевой и седьмой биты":
Листинг программы
  1. (defvar x 0)
  2. (setf x (read))
  3. (defun change-byte (b)
  4. (dotimes (i 4 b)
  5. (when
  6. (= i 0)
  7. (logbitp i b)
  8. (setf b
  9. (logxor
  10. (+ (ash 1 i) (ash 1 (- 7 i)))
  11. b)))))
  12. (dotimes (i (ceiling (integer-length x) 8))
  13. (setf x
  14. (dpb
  15. (change-byte (ldb (byte 8 (* i 8)) x))
  16. (byte 8 (* i 8)) x)))
а как сделать единичными третий и четвертый биты не могу сообразить. help, задача срочная! пожалуйста, отзовитесь, кто понимает лисп!

Решение задачи: «В каждом байте числа обнулить 0-ой и 7-ой биты и сделать единичными 3-ий и 4-ый биты»

textual
Листинг программы
  1. (defun foo (n)
  2.   (dotimes (i (ceiling (integer-length n) 8) n)
  3.     (setf #1=(ldb (byte 8 (* 8 i)) n)
  4.           (logior (logand #1# #b01111110) #b00011000))))

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

В данном коде функция foo принимает в качестве аргумента n – некоторый целочисленный номер. Внутри функции происходит цикл по всем байтам числа n:

  1. (dotimes (i (ceiling (integer-length n) 8) n) — цикл по всем байтам числа n
  2. (setf #1=(ldb (byte 8 (* 8 i)) n) — получение i-го байта из числа n
  3. (logior (logand #1# #b01111110) #b00011000) — обнуление 0-го и 7-го битов и установка 3-го и 4-го битов в 1
  4. Конец цикла В данном коде нет использования переменных с номерами 2, 3, 5, 6, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20.

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


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

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

15   голосов , оценка 4.2 из 5

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

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

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