Программа на common lisp
Формулировка задачи:
Программа на common lisp
Прочитать беззнаковое целое число из стандартного потока ввода и в каждом байте числа обнулить нулевой и седьмой биты и сделать единичными третий и четвертый биты. Результат вывести в стандартный поток вывода.
Получиться должно примерно вот так:
65535 (11111111 11111111)
32382 (01111110 01111110)
Решение задачи: «Программа на common lisp»
textual
Листинг программы
(defun fn (word) (check-type word (unsigned-byte 16)) (logior #b0001100000011000 (logand #b0111111001111110 word))) (defun main () (let ((word (the (unsigned-byte 16) (read)))) (format t "~&~A (~:*~B)~%~A (~:*~B)~%" word (fn word))))
Объяснение кода листинга программы
- Определяет функцию
fn, которая принимает один аргументword. - Проверяет тип аргумента
wordс помощьюcheck-type. - Использует
logiorдля побитового ИЛИ аргументаwordс фиксированным значением#b0001100000011000. - Использует
logandдля побитового И первого аргументаword. - Определяет функцию
main, которая не принимает аргументов. - Использует
letдля создания переменнойword, которая содержит 16-битное беззнаковое число, считанное с помощьюread. - Выводит значение переменной
wordс помощьюformat. - Вызывает функцию
fnс аргументомword. - Выводит результат вызова функции
fnс помощьюformat.