Я разрабатываю калькулятор с SBCL и хочу принимать и отображать числа в двоичном формате. Чтение и запись Common Lisp по умолчанию использует основание 10 (т. е. десятичное число). Есть ли способ легко читать и записывать числа в двоичном формате? Если да, нужно ли мне использовать разные арифметические функции для работы с ними?
Как читать, писать и вычислять двоичные числа?
Ответы (2)
В этой статье предполагается, что добавление префикса #b к числам скажет компилятор/интерпретатор для обработки их как двоичных чисел.
Из статьи:
#b10101 ==> 21
В памяти каждое число находится в двоичном формате. Вы просто имеете дело с разными представлениями чисел в своем калькуляторе.
Когда вы читаете свои выражения, просто преобразуйте литералы двоичных чисел в обычные числа lisp, вычислите значение выражения, а затем распечатайте результат в любом представлении, которое вам нравится.
> (setq result (+ (parse-integer "11" :radix 2)
(parse-integer "01" :radix 2)))
4
> (write-to-string result :base 2)
100
При этом вы также можете изменить базу по умолчанию для того, как интерпретатор LISP читает и печатает числа, установив переменную *read-base*
или *print-base*
соответственно:
> (setq *write-base* 2)
10
> (setq *print-base* 2)
10
> (+ 11 01)
100
Обратите внимание, чтобы вернуться к обычным десятичным числам, вы также должны вводить числа в двоичном формате, пока вы снова не измените *read-base*
:
> (setq *read-base* 1010)
1010
> 5
101
> (setq *print-base* 10)
10
> 5
5
Наконец, вы можете использовать специальный синтаксис чтения для чтения чисел в системе счисления, отличной от 10:
> (+ #b11 #b01)
4