我想知道如何在lisp中添加几个十六进制数字而不先将它们转换为另一个基数。怎么可以这样做?
答案 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。但是这样的函数没什么用处,但作为演示符号十六进制加法算法的练习。