Common lisp 如何读取、写入和计算二进制数?

Common lisp 如何读取、写入和计算二进制数?,common-lisp,sbcl,Common Lisp,Sbcl,我正在用SBCL开发一个计算器,希望接受并显示二进制数字。Common Lisp的默认读写使用基数10(即十进制)。有没有一种方法可以轻松地读写二进制数字?如果是这样的话,我是否需要使用不同的算术函数来处理它们?建议在数字前面加上#b将告诉编译器/解释器将它们视为二进制数 从文章中: #b10101 ==> 21 在内存中,每个数字都是二进制的。您只是在处理计算器中数字的不同表示形式 读取表达式时,只需将二进制数文本转换为普通lisp数,计算表达式的值,然后以您喜欢的任何表示形式打印结果

我正在用SBCL开发一个计算器,希望接受并显示二进制数字。Common Lisp的默认读写使用基数10(即十进制)。有没有一种方法可以轻松地读写二进制数字?如果是这样的话,我是否需要使用不同的算术函数来处理它们?

建议在数字前面加上#b将告诉编译器/解释器将它们视为二进制数

从文章中:

#b10101 ==> 21

在内存中,每个数字都是二进制的。您只是在处理计算器中数字的不同表示形式

读取表达式时,只需将二进制数文本转换为普通lisp数,计算表达式的值,然后以您喜欢的任何表示形式打印结果

>(setq结果(+(解析整数“11”:基数2)
(解析整数“01”:基数2)))
4.
>(写入字符串结果:基2)
100
也就是说,您还可以通过分别设置
*read base*
*print base*
变量来更改LISP解释器读取和打印数字的默认基数:

>(setq*写基*2)
10
>(setq*打印基数*2)
10
> (+ 11 01)
100
注意,为了切换回正常的十进制数,您还必须以二进制输入数字,直到再次更改
*读取基数*

>(setq*读取基数*1010)
1010
> 5
101
>(setq*打印基数*10)
10
> 5
5.
最后,您可以使用特殊的读取语法来读取除10以外的数字:

>(+#b11#b01)
4.

您使用的是哪种LISP方言?我使用SBCL for SB Thread也使用(格式t“~B”123)以二进制形式打印数字。此注释中的示例给出了1111011