我正在开发一个带有SBCL的计算器,并希望接受并显示二进制数字.Common Lisp的默认读写使用基数10(即十进制).有没有办法轻松读取和写入二进制数字?如果是这样,我是否需要使用不同的算术函数来处理它们?
在内存中,每个数字都是二进制的.您只需处理计算器中不同的数字表示.
当您读取表达式时,只需将二进制数字文字转换为普通的lisp数字,计算表达式的值,然后以您喜欢的任何表示形式打印出结果.
> (setq result (+ (parse-integer "11" :radix 2)
(parse-integer "01" :radix 2)))
4
> (write-to-string result :base 2)
100
Run Code Online (Sandbox Code Playgroud)
话虽这么说,您也可以通过分别设置*read-base*或*print-base*变量来更改LISP解释器读取和打印数字的默认基础:
> (setq *write-base* 2)
10
> (setq *print-base* 2)
10
> (+ 11 01)
100
Run Code Online (Sandbox Code Playgroud)
注意,为了切换回正常的十进制数,您还必须以二进制形式输入数字,直到您*read-base*再次更改为止:
> (setq *read-base* 1010)
1010
> 5
101
> (setq *print-base* 10)
10
> 5
5
Run Code Online (Sandbox Code Playgroud)
最后,您可以使用特殊的读取语法来读取10以外的数字:
> (+ #b11 #b01)
4
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1450 次 |
| 最近记录: |