Lisp - 如何在没有基本转换的情况下添加几个十六进制数字?

时间:2011-04-21 15:41:01

标签: math lisp numbers hex addition

我想知道如何在lisp中添加几个十六进制数字而不先将它们转换为另一个基数。怎么可以这样做?

3 个答案:

答案 0 :(得分:6)

Common Lisp:

> (setf *print-base* 16)

> (setf *read-base* 16)

> (+ a d)
17

答案 1 :(得分:3)

在GNU Emacs中,十六进制数用#x标记。

(+ #x3 #xA)
13

我不知道Common LISP或Scheme使用的是什么。

如果您拥有的是

125A BD22 34FF

并且你想要添加它们,你必须对它们进行编辑传递以在将它们包装进去之前添加#x标签(+ ...)。

(+ #x125A #xBD22 #x34FF)

答案 2 :(得分:3)

十六进制只是使用0到F之间数字的数字的字符表示。 Lisp实现通常会在添加之前将十六进制数转换为其内部二进制表示。然后,如果这是所需的演示文稿格式,则可以以十六进制打印总和:

(format T "~x" (+ #xA #x2))

您可以编写一个函数来实现符号添加十六进制字符数字的逻辑,例如#\ A +#2是#\ C,如果您想要超越单个十六进制数字,则处理carry。但是这样的函数没什么用处,但作为演示符号十六进制加法算法的练习。