我正在使用SBCL开发一个计算器,并希望接受并显示二进制数字。 Common Lisp的默认读写使用基数10(即十进制)。有没有办法轻松读取和写入二进制数字?如果是这样,我是否需要使用不同的算术函数来处理它们?
答案 0 :(得分:6)
在内存中,每个数字都是二进制的。您只是在计算器中处理不同的数字表示。
当您阅读表达式时,只需将二进制数字文字转换为普通的lisp数字,计算表达式的值,然后以您喜欢的任何表示形式打印出结果。
> (setq result (+ (parse-integer "11" :radix 2)
(parse-integer "01" :radix 2)))
4
> (write-to-string result :base 2)
100
话虽如此,您也可以通过分别设置*read-base*
或*print-base*
变量来更改LISP解释器读取和打印数字的默认基础:
> (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
答案 1 :(得分:2)